基于给定的平均值和标准偏差,我试图用各种样本运行来填充列。我现在拥有的是:
A = data.table(ave = c(20, 3), std = c(.1, 1))
A[, paste0("scenario", c(1:3)) := rnorm(2, ave, std)]
表中的结果如下:
ave std scenario1 scenario2 scenario3
20 0.1 20.2377 20.2377 20.2377
3 1.0 2.6497 2.6497 2.6497
很明显,它在一个向量上运行rnorm,然后为每个列重复相同的向量。如何重新计算每列?我尝试过类似的东西
matrix(rnorm(6, ave, std), 2, 3)
或者使用transpose(lapply(...))
但似乎都不起作用。
您可以为每列调用rnorm
:
A[, paste0("scenario", c(1:3)) := lapply(1:3, function(x) rnorm(2, ave, std))]
我们可以使用replicate
A[, paste0("scenario",c(1:3)) := replicate(3, rnorm(2, ave, std), simplify = FALSE)]