for循环仅显示R中一个案例的结果

时间:2018-02-06 22:52:54

标签: r for-loop

我打算填充我创建的有1000行2列的矩阵。这里B是1000。

resampled_ests <- matrix(NA, nrow = B, ncol = 2)
names(resampled_ests) <- c("Intercept_Est", "Slope_Est")

我想使用for循环从1到1000来填充它。

ds <- diamonds[resampled_values[b,],] 

这里,每个ds(for循环中应该有1000个版本)是一个包含2列和2000行的数据帧。我想使用lm()函数来获取两列数据的Beta系数。

for (b in 1:B) {
#Write code that fills in the matrix resample_ests with coefficent estimates.
  ds <- diamonds[resampled_values[b,],]
  lm2 <- lm(ds$price~ds$carat, data = ds)
  rowx <- coefficients(lm2)
  resampled_ests <- rbind(rowx)
}

然而,在我运行循环后,resampled_ests,它应该是1000行的矩阵,只显示1行,1对系数。但是当我通过用数字替换b来测试循环外部的代码时,我会得到不同的结果,这是正确的。但是通过将它们放在for循环中,我似乎不是所有这些不同系数对的行绑定。有人可以解释为什么结果矩阵resampled_ets只显示一个结果案例(1行)数据吗?

1 个答案:

答案 0 :(得分:1)

rbind(x)会返回x,因为您没有将其绑定到任何内容。如果你想逐行构建一个矩阵,你需要像

这样的东西
resampled_ests <- rbind(resampled_ests, rowx)

这也意味着您需要在循环之前初始化resampled_ests

其中,如果您还是这样做,我可能会制作一个1000 x 2的零矩阵并填充循环中的行。有点像...

resampled_ests <- matrix(rep(0, 2*B), nrow=B)
for (b in 1:B) {
ds <- diamonds[resampled_values[b,],]
lm2 <- lm(ds$price~ds$carat, data = ds)
rowx <- coefficients(lm2)
resampled_ests[b,] <- rowx
}