Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于步骤()的用户定义函数给出:eval(expr、envir、enclose)中的错误:object';X';找不到_R_Vegan - Fatal编程技术网

基于步骤()的用户定义函数给出:eval(expr、envir、enclose)中的错误:object';X';找不到

基于步骤()的用户定义函数给出:eval(expr、envir、enclose)中的错误:object';X';找不到,r,vegan,R,Vegan,我正在尝试构建一个函数,该函数围绕着素食者包中的ordiR2step()函数。此函数基于step()函数 这是在函数之外工作得非常好的代码: install.packages("vegan") require(vegan) data(mite) data(mite.env) #explanatory variables mite.hel = decostand(mite, "hel") #response variable mod0 <-

我正在尝试构建一个函数,该函数围绕着
素食者
包中的
ordiR2step()
函数。此函数基于
step()
函数

这是在函数之外工作得非常好的代码:

    install.packages("vegan")
    require(vegan)
    data(mite) 
    data(mite.env) #explanatory variables
    mite.hel = decostand(mite, "hel") #response variable
    mod0 <- rda(mite.hel ~ 1, mite.env)  # Model with intercept only 
    mod1 <- rda(mite.hel ~ ., mite.env)  # Model with all explanatory variables
    step.res <- ordiR2step(mod0, scope = formula(mod1), direction="forward") 
    step.res$anova 
    forward <- function(X, Y) {
    intercept <- rda(X ~ 1, data = Y)  # Model with intercept only
    model <- rda(X ~ ., data = Y)  # Model with all explanatory variables
    # this is where debugging is stuck
    forStep <- ordiR2step(object=intercept, scope = formula(model), 
                    direction = "forward", trace = FALSE)
    list(forStep$anova)
    }
    forward(mite.hel, mite)

同样的错误。。。没有骰子。。。有什么建议吗?谢谢你的时间

如果不打开
或rd2step()
的内部结构,我认为这是不可能的。该错误是由
ordiParseFormula()
引起的,此时对它的调用被深深地埋藏在调用堆栈中。我的意思是,这些函数是为了交互工作而编写的,当您开始将它们嵌入到其他函数中时,就不必下赌注了。我会看一看有问题的函数,看看我们是否能改进它以提供帮助。问题实际上是当
ordiParseFormula()
开始为正向选择链中的下一个模型解析公式时……它在少数位置寻找
X
,而不是在函数
forward()
的执行帧中。调用堆栈确实很深。似乎,
OrdParseFormula(…,envdepth=6)
将获取数据(默认值为
envdepth=2
)。当
update()
尝试更改模型时,会触发该错误。似乎无法更改
envdepth
值。也许你有一些秘密议程,但是对于这个特定的任务,没有必要将这三个命令包装在
forward()
:你可以直接发出这些命令,然后分析就可以毫无问题地运行了。似乎有两个纯素开发人员在这个案例中,我得到了很好的帮助!谢谢你的评论。事实上,我确实有一个秘密议程,这里我只提供了最简单的例子来重现我试图规避的错误。我正在尝试许多不同的rda模型,这些模型结合了dbMEMs,因此它对于自动化所选空间结构的探索和可视化非常有用。虽然我还将错误跟踪到了
update()
,但我没有跟踪,甚至无法说出调用
ordiParseformula()
的位置/方式。。。因此,我已经达到了自己调试技能的极限(相当卑微)。无论如何,我相信你的话,我不能更改
envdepth
值,所以现在我只在运行函数之前在全局环境中定义对象。不过,如果你真的弄明白了这一点,我想可能还有其他感激的探索者会尝试包装
ordistep()
,以测试一些很酷的模型选择应用程序,并捆绑一些其他功能。干杯,谢谢你的帮助!
    forward2 <- function(X, Y) {
    intercept <- do.call("rda",list(X ~ 1, data = Y))  
    model <- do.call("rda", list(X ~ ., data = Y))  
    forStep <- ordiR2step(object=intercept, scope = formula(model), 
                    direction = "forward", trace = FALSE)
    list(forStep$anova)
    }
    forward2(mite.hel, mite.env)