3

我是循环新手,从第 i 个数据帧调用变量时遇到问题。

我能够正确调用每个数据框,但是当我应该在每个数据框内调用指定变量时,问题来了:

例子:

for (i in 1:15) {
    assign(
      paste("model", i, sep = ""), 
    (lm(response ~ variable, data = eval(parse(text = paste("data", i, sep = "")))))
    )
    plot(data[i]$response, predict.lm(eval(parse(text = paste("model", i, sep = ""))))) #plot obs vs preds
}

在这里,我做了一个简单的单变量线性模型 15 次,效果很好。当我尝试绘制结果时,问题就来了。我应该如何调用data[i]响应?

4

2 回答 2

3

假设有多个具有名称的数据帧:data1 ...data15,并且没有其他以字母开头的数据对象:d,a,t,a。让我们还假设在每个数据框中都有名为“响应”和“变量”的列。这会将数据框收集到一个列表中,并为线性回归线绘制单独的图。

dlist <- lapply ( ls(patt='^data'), get)
lapply(dlist, function(df) 
                 plot(NA, xlim=range(df$variable), ylim=range(df$response)
                 abline( coef( lm(response ~ variable, data=df) ) )
         )

如果您想命名该列表中的数据框,您可以使用粘贴代码来提供名称:

names(dlist) <- paste("data", i, sep = "")

您可以在此循环的上下文中进行许多其他分配,但您需要更好地描述期望的结果,而不是失败的努力。

于 2013-07-28T19:59:32.137 回答
0

这是应该可以工作的修改后的代码。它执行一个变量 lm 模型并计算预测值和观察值的相关性并将其存储到一个空矩阵中。它还绘制这些值。
感谢托马斯的帮助。

par(mfrow=c(4,5))
results.matrix <- matrix(NA, nrow = 20, ncol = 2)
colnames(results.matrix) <- c("Subset","Correlation")

for (i in 1:length(datalist)) {
    model <- lm(response ~ variable, data = datalist[[i]])
    pred <- predict.lm(model)
    cor <- (cor.test(pred, datalist[[i]]$response))
    plot(pred, datalist[[i]]$response, xlab="pred", ylab="obs")
    results.matrix[i, 1] <- i
    results.matrix[i, 2] <- cor$estimate
}
于 2013-07-29T09:44:59.790 回答