【发布时间】:2015-08-27 22:45:47
【问题描述】:
基于this post,我创建了以下矩阵和for 循环来遍历我的df 中的所有回归组合:
all_lm <-data.frame(matrix(nrow=180, ncol=9))
names(all_lm)=c("col1", "col2", "Estimate", " Std. Error", " z value", " pValue", "2.5%", "97.5%", "r^2")
为了保存结果,这个:
for (i in c("A","B","C"))
for (j in c(1:10))
for (k in c("D","E"))
for (l in c("F", "G", "H")){
form <- formula(paste0(i,"_PC_AB_",k, " ~ ", l))
result<-lm(form, data = schools, subset=Decile==j)
all_lm[i,1]<-i
all_lm[i,2]<-j
all_lm[i,3]<-round(coef(summary(result))[2,1],3)
all_lm[i,4]<-round(coef(summary(result))[2,2],3)
all_lm[i,5]<-round(coef(summary(result))[2,3],3)
all_lm[i,6]<-round(coef(summary(result))[2,4],3)
all_lm[i,7]<-round(confint(result)[2,1],2)
all_lm[i,8]<-round(confint(result)[2,2],2)
all_lm[i,9]<-round(summary(result)$r.squared, 3)
}
当我使用它导出Cairo 中的图时,此循环配置有效,但我意识到all_lm[i,n] 是一种不正确的方法。我对 R 的了解还不够,无法解决这个问题。我尝试了各种组合,例如all_lm[i,j,k,n]。我也试过 { 在每个 for 之后,但这没有用。如何循环遍历 180 个回归并将结果存储在我的矩阵中?
【问题讨论】:
-
为什么四个控制结构只有一组大括号?
-
正如我在帖子中所说,当用于包
Cairo时,这个完全相同的for循环配置有效。正如我在上面所说的,我在所有四个控制结构(最后四个)之后尝试了 { 大括号,但这也不起作用。如上所述,问题再次出现在 `all_lm[i,1]' 中。 -
括号适用于子集行和列。总是
[row, column]。您的i变量取值“A”,然后是“B”,然后是“C”,然后是“D”。因此,当您运行all_lm[i, 1] <- i时,这相当于all_lm["A", 1] <- "A",除非您有一个名为"A"的行,否则它将不起作用。看起来你没有任何行名,所以这不起作用。 -
此外,这条 i-dependent 行
all_lm[i, 1] <- i正在运行 很多 次而不是必要的。每次i或j或k或l递增时,您都会运行它。它应该在您的i循环内,但在其他循环之外。与仅依赖于j的行相同。您随后的round(coef(summary(...)))行将具有取决于k和l的值,因为您的公式会根据k和l而变化,但是您存储它们的位置仅取决于i,所以您'最终会用较新的值覆盖这些值。 -
@LeroyTyrone 大括号与此错误没有任何关系,我只是说一致使用它们,以及适当的缩进将使您的代码更具可读性...