如何将结果列绑定到 for 循环中的数据框?

How to bind resultant columns to a data frame in for loop?

我想对 12 次迭代执行蒙特卡洛模拟,均值在 5 到 60 之间变化,间隔为 5。作为以下代码的输出,我希望每个模拟结果在不同的列中作为数据框。例如,如果我想对每组均值和 std.dev 执行 10,000 次模拟,生成的数据框将有 12 列和 10000 行。 代码是:

df<-data.frame()
for (i=5; i<=60; i=i+5)
  {
  {
    cvsq=1
    mcs=rnorm(10000,i,(i*cvsq))
    op$i<-data.frame(mcs)
  }
  df<-cbind(op)
  }
df

此代码的结果是一个包含两列的数据框,其中仅包含 60 和 5 的模拟结果。

您的代码非常C++ 专注。我包含了一个 R 版本,所以你可以添加你想要的或者写一个新的。

#Create ranges and list
vec <- seq(5,60,by=5)
List <- list()
#Loop
for(j in 1:length(vec))
{
  for (i in vec)
  {
    cvsq=1
    mcs=rnorm(10000,i,(i*cvsq))
    index <- i
    List[[j]]<-data.frame(index,mcs)
  }
}

List

您可以使用 sapply :

sd <- 1
out <- sapply(seq(5, 60, 5), rnorm, n = 10000, sd = sd)
dim(out)
#[1] 10000    12

可以使用 lapplydo.call

DF <- do.call(cbind, 
        lapply(seq(5,60,5), function(i) setNames(data.frame(rnorm(10000, i, (i*cvsq))), i))
)

head(DF)
       5      10     15       20     25      30    35     40      45     50      55     60
1  2.621  9.3083  7.004 -20.4034  43.77  -6.906 15.68  60.42 -30.981 55.634  -2.329 156.45
2  3.490 -4.1331  9.461  24.7668  15.06  69.660 15.48 132.71  21.109  8.984  84.382  63.27
3  4.863 -0.8772  3.649   0.2247  14.01  16.365 81.56 -19.01  27.993 15.910  13.690 106.21
4  4.516 17.0948 -2.754   9.7998  37.01  76.459 56.19  26.39  80.759 54.173  13.152  34.03
5 11.110 16.7807 39.529  -2.9710 -11.61 -10.982 68.50  48.68  53.811 30.779  78.196 -36.90
6 -3.297  1.0127 15.150  37.9734  11.31  45.855 58.18  22.91   5.654 66.101 -35.472  68.05