我想要在同一数据集的子集上执行相同的rda分析序列(拟合模型,测试模型的显着性,轴和术语,绘制数据) 。所以我写了一个函数。现在的问题是,当我想测试轴时,调用anova.cca函数在函数内不能正常工作。它不能找到Y.sub数据集anova.cca在用户定义的函数内找不到对象
错误的eval(表达式,ENVIR,enclos):对象RV.sub'未找到
最小工作示例:
library(vegan)
data(dune)
data(dune.env)
rda.subsetfunc <- function(RV, Y){
#RV.sub <- subset(RV, !Y$Use%in%c("BF"))
#Y.sub <- subset(Y, !Y$Use%in%c("BF"))
RV.sub <- RV; Y.sub <- Y
rda.mod <- rda(RV.sub ~ Manure, Y.sub)
axis.test <- anova(rda.mod, by = "axis")
return(list(rda.mod, axis.test))
}
rda.subsetfunc(RV = dune, Y = dune.env)
我发现了一些其他相关的问题,如here,但这似乎比我所做的要复杂得多。我试图执行doscall方法,正如here提到的,但我无法实现它的工作。如果真的不可能在没有深入研究函数的情况下做到这一点,我会在周围找到一种编程方式。但对我而言,这感觉就像我正在努力做一些总体上有意义的事情。因此,我做错事的可能性比我做不可能事情的可能性更大。
我在原来的问题打字的时候做了一个愚蠢的错误工作。我最初把'rda.subsetfunc(RV = dune,Y = Y.sub)'这不起作用的原因很明显。感谢@ chi-pak让我认识到 – Nightingale
这不是问题,因为RV.sub是X矩阵,而不是Y的列。这是rda函数的工作方式。如果我省略了anova函数,我的函数可以正常工作。这是造成麻烦的原因之一。 我真的很感谢你的帮助! – Nightingale
来自rda的帮助页面。 (沙丘) data(dune.env) dune.Manure < - rda(dune〜Manure, – Nightingale