更新:之前的标题是是否有特殊的方法将数据框作为函数参数传递?
但根据这里聪明的人们的建议,这不是正确的问题。原始帖子如下。
当我使用somefunc(sleepstudy)
运行以下函数时,
somefunc<-function (dataLme)
{
library(effects)
library(lme4)
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), dataLme,
REML = 0, verbose = TRUE)
plot(effect("Days",fm8))
}
我遇到了一个错误。
Error in plot(effect("Days", fm8)) :
error in evaluating the argument 'x' in selecting a method for function 'plot': Error in is.data.frame(data) : object 'dataLme' not found
但如果我手动执行
library(effects)
library(lme4)
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy,
REML = 0, verbose = TRUE)
plot(effect("Days",fm8))
我没有收到任何错误提示。
我原以为 R 是按值传递,意味着将整个对象内容复制到函数参数中。但看起来我并不完全正确。有人能解释一下发生了什么吗?
effect
试图在错误的位置对模型拟合调用进行eval
。或者至少是在一个导致其无法在函数内正确运行的位置上进行了调用。 - joranoptions(error=recover)
在调试时非常有用,可以快速帮助识别这些类型的问题。 - Dasontraceback
,将问题缩小到(未导出的函数)mer.to.glm
内部的eval(cl)
。如果你逐步执行,就会发现在eval(cl)
中更改环境参数似乎可以解决问题。 - joran