未找到变量;范围问题
Variable not Found; Scoping Issue
我 运行 遇到了一些奇怪的范围界定(也许?)问题...下面的 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)
}
我不确定我能否解决这个问题,让它正常工作,但我想我可以解释发生了什么并为您提供合理的解决方法。
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
(可能也可以处理这个......)
我 运行 遇到了一些奇怪的范围界定(也许?)问题...下面的 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)
}
我不确定我能否解决这个问题,让它正常工作,但我想我可以解释发生了什么并为您提供合理的解决方法。
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
(可能也可以处理这个......)