在R中的循环中调用多个模型名称

时间:2014-11-25 23:48:52

标签: r

我很难尝试在循环中为多个模型创建残差图。我使用循环来创建模型:

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'值

我想知道如何以有序的方式调用我在第一个循环中创建的模型,以用于绘制循环和我想对所有模型进行的其他分析。

1 个答案:

答案 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))
})