我很难尝试在循环中为多个模型创建残差图。我使用循环来创建模型:
nameIndex=1
name=character(length=nrow(resp))
for(i in resp$resp){
y=response.data[,i]
df=data.frame(y, modelpredictors) #this creates a temporary data frame for you
nam=paste("MODEL", nameIndex, sep=".") #Create unique model names to use later
model=lm(y~.,data=df)
assign(nam, model)
name[nameIndex]=nam #saving model names in a vector to use later
nameIndex=nameIndex+1
}
现在,我想做一个循环来制作残差图。
par(mfrow=c(2,3))
for(i in nrow(resp)){
plot(fitted(cat("MODEL.",i)),residuals (cat("MODEL.",i)))
}
但是,我收到了错误
plot.window(...)出错:需要有限的'xlim'值
我想知道如何以有序的方式调用我在第一个循环中创建的模型,以用于绘制循环和我想对所有模型进行的其他分析。
答案 0 :(得分:1)
cat()
函数写入终端(或磁盘),它不会生成变量名称。与assign()
对应的函数为get()
。你应该可以做到
par(mfrow=c(2,3))
for(i in nrow(resp)){
plot(fitted(get(paste0("MODEL.",i))),residuals(get(paste0(("MODEL.",i))))
}
虽然使用这样的字符串构建变量名称通常不是一个好策略。你可能应该在列表中讲述事情。如果您确实包含reproducible example,则可以更轻松地为更多" R-like"解。也许像是
models <- lapply(resp$resp, function(r) {
y <- response.data[,r]
lm(y~., data=data.frame(y, modelpredictors))
})
然后
par(mfrow=c(2,3))
lapply(models, function(m) {
plot(fitted(m), residuals(m))
})