我正在尝试在R中编写一个for循环(我的第一个!),以便生成并保存使用lme4包中的函数lmer安装的几个混合效果模型的诊断图 . 这就是我到目前为止用sleepstudy数据做的例子:
require(lme4)
mod1<-lmer(Reaction ~ Days + (1|Subject),sleepstudy)
mod2<-lmer(Reaction ~ 1 + (1|Subject),sleepstudy)
List<-c(mod1,mod2)
names<-c("mod1","mod2")
i=1
for (i in 1:length(List)) {
jpeg(file = paste("modelval_", names[i], ".jpg", sep=""))
par(mfrow=c(2,2))
plot(resid(List[i]) ~ fitted(List[i]),main="residual plot")
abline(h=0)
qqnorm(resid(List[i]), main="Q-Q plot of residuals")
qqnorm(ranef(List[i])$Subject$"(Intercept)", main="Q-Q plot of random effect" )
dev.off()
}
输入R consol时收到以下错误消息:
Error in function (formula, data = NULL, subset = NULL, na.action = na.fail, :
invalid type (NULL) for variable 'resid(list[i])'
我有一种感觉,问题与我创建的模型列表有关,而不是for循环本身,我认为它可能与类S4的模型对象有关 . 是否可以制作这样的清单?我也试过制作如下所示的列表,没有任何改进(仍然得到相同的错误消息)
List<-list(mod1,mod2)
1 回答
首先使用
c
可能会丢失您创建的对象的类结构 . 要制作包含模型的列表,请使用list(mod1, mod2)
.其次,
List[i]
是长度为1的列表,其中包含List
的第i个元素 . 使用List[[i]]
提取元素本身(您的模型) .