我遇到了一些奇怪的范围(可能是?)问题......下面的MWE调用RunSamples,打印变量pr
,然后在下一行抛出错误,说明pr
不存在。我似乎无法理解为什么print函数可以找到并打印变量pr
,但lmer不能。任何帮助,将不胜感激。此外,如果我将pr
参数更改为prot
,则代码运行正常。
require(lme4)
dat <-data.frame(value=1:10,Item=1:10,Protocol=rep(c("FFT","Data"),5))
RunSamples <- function(dat,form,pr) {
rets <- list()
print(pr)
rets$Full <- lmer(update.formula(form,.~.),data=dat, subset= Protocol==pr )
return( rets )
}
RunFullMain <- function(prot="CLASS") {
ret <- list()
form <- value~0+Item
ret$Item <- RunSamples(dat=dat,form=form ,prot)
return(ret)
}
Results <- list()
for (pp in c("FFT","CLASS","PLATO")) {
Results[[pp]] <- RunFullMain(pp)
}
答案 0 :(得分:0)
我不确定我是否可以解决这个问题,就像让它工作一样,但我想我可以解释发生了什么,并给你一个合理的解决方法。
lmer
会尝试评估数据并确保公式中提到的所有变量都存在,从而会执行各种(可能过于复杂)的复杂操作。它试图携带data
参数中的所有变量,以及存在于公式环境中的变量,但除此之外它还有问题。这里的近端问题是你的subset
调用是指在这两个地方都不存在的变量。简单的解决方法是使用subset
函数而不是subset
参数:
RunSamples <- function(dat,form,pr) {
rets <- list()
rets$Full <- lmer(update.formula(form,.~.),
data=subset(dat,Protocol==pr))
return( rets )
}
以便子集化立即完成,而不是等到从无法找到pr
的环境中调用函数。
当我这样做时,我会遇到一系列不同的问题,这可能是由于你设置了一个不切实际的简单MWE ......
Error: no random effects terms specified in the formula
。 (原始公式中将0+Item
更改为0+(1|Item)
)Error: number of levels of each grouping factor must be < number of observations
(可能也可以处理这个......)