2013-02-22 71 views
2

我試圖在R(我的第一個!)中編寫一個for循環,以生成並保存使用函數lmer在包lme4中擬合的幾個混合效果模型的診斷圖。這是我做了什麼至今所sleepstudy數據爲例:如何製作lmer模型obejcts的列表以用於R中的for循環?

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康壽時,我得到了以下錯誤消息:

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) 

回答

2

首先使用c可以冒失去你所創建的對象的類結構。要製作包含您的模型的列表,請使用list(mod1, mod2)

二,List[i]是長度爲1的列表,包含List的第i個元素。使用List[[i]]來提取元素本身(您的模型)。