我正在尝试使用包中的dredge
功能MuMIn
,如下所示。因为我想为不同的数据集运行它,所以我使用了一个函数,它接受协变量的向量,并且公式是从函数内的这个向量创建的。
require(lme4);require(MuMIn)
x1 <- rnorm(100)
x2 <- rnorm(100)
zrand <- sample(letters, 100, replace =T)
yind <- sample(1:1000, size=100, replace=T)
mydata <- data.frame(yind, x1, x2, zrand)
vars <- c('x1', 'x2')
当我以这种方式运行它时,我得到符号不是子集的错误。我认为这与vars
在公式中使用有关,尽管 lmer 运行良好
myformula <- as.formula(paste('yind~',paste(vars,collapse='+'),'+(1|zrand)'))
mylmer1 <- lmer(myformula, mydata, gaussian)
dredge(mylmer1)
术语错误(as.formula(公式(x))):在为函数“术语”选择方法时评估参数“x”时出错:错误:“符号”类型的对象不可子集
但这很好用,原因我不完全理解,但与疏浚功能的范围有关。(我在这里可能完全不合时宜)
mylmer2 <- lmer(as.formula(paste('yind~',paste(vars,collapse='+'),'+(1|zrand)')),
mydata, gaussian)
dredge(mylmer2)
我在分析中所做的更类似于此,其中 lmer 和 dredge 在函数内运行
myfn <- function(fnd,fnvar){
myformula <- as.formula(paste('yind~',paste(fnvar,collapse='+'),'+(1|zrand)'))
print(myformula)
mylmer1 <- lmer(myformula, fnd, gaussian)
print(mylmer1@call)
print(dredge(mylmer1))
mylmer2 <- lmer(as.formula(paste('yind~',paste(fnvar,collapse='+'),'+(1|zrand)')),
fnd, gaussian)
print(mylmer2@call)
print(dredge(mylmer2))
}
myfn(fnd=mydata, fnvar=vars)
Dredgin 只有 lmer1 给出了这个错误:
Error in print(dredge(mylmer1)) :
error in evaluating the argument 'x' in selecting a method for function 'print': Error in terms(as.formula(formula(x))) :
error in evaluating the argument 'x' in selecting a method for function 'terms': Error: object of type 'symbol' is not subsettable
仅疏浚lmer2,出现以下错误
Error in print(dredge(mylmer2)) :
error in evaluating the argument 'x' in selecting a method for function 'print': Error in terms(as.formula(formula(x))) :
error in evaluating the argument 'x' in selecting a method for function 'terms': Error in paste(fnvar, collapse = "+") : object 'fnvar' not found.
有没有办法解决这个问题?这是疏浚功能的必要限制吗?