我是循环的新手,我从第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]
回复?
答案 0 :(得分:3)
假设有多个数据框的名称为:data1 ... data15,并且没有其他数据对象以字母开头:d,a,t,a。让我们假设在每个数据帧中都有名为“response”和“variable”的列。这会将数据帧收集到一个列表中,并为线性回归线绘制单独的图。
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 = "")
您可以在此循环的上下文中进行许多其他分配,但是您需要比失败的工作更好地描述所需的结果。
答案 1 :(得分: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
}