如何使用lapply和replicate在R中创建顺序排序的列表?

时间:2018-05-16 22:23:19

标签: r

我一直试图避免R中的for循环。但是,我在使用lapplyreplicate时遇到了问题,因为我获得的列表的顺序不是顺序的。例如,以下代码:

lapply(1:5, function(x) replicate(100, rnorm(x), simplify = F))

创建100个实例:rnorm(1)rnorm(2),...,rnorm(5)

这比使用for循环要快得多。但是,我得到的结果列表索引是:

.........
[[5]][[98]]
[1] -0.87686000 -0.82373642 -0.05671333 -2.24652788 -1.43497760

[[5]][[99]]
[1] -1.6935926  0.4753606  0.1190997  0.1464246  0.8604974

[[5]][[100]]
[1]  0.68414921  0.32183115  1.23681540 -1.34076190 -0.08467215

而我想要的是:

[[1]] -0.87686000
[[2]] -0.8237
......
[[500]] 1.236

有没有办法修改上面的代码,以便从1到500的顺序排序?谢谢!

1 个答案:

答案 0 :(得分:3)

您只需在结果上调用unlist(),例如:

unlist(lapply(1:5, function(x) replicate(100, rnorm(x))))

虽然注意到你会得到一个长度 1500 的原子矢量 - 因为你生成1 + 2 + 3 + 4 + 5 = 15个随机值100次。

你的目标是什么?

如果目标是获得500个总值,平均值在每次迭代中从1变为5,那么您可以说:

unlist(lapply(1:5, function(x) replicate(100, rnorm(1, mean=x))))

您可以看到上升趋势,例如:

values <- unlist(lapply(1:5, function(x) replicate(100, rnorm(1, mean=x))))
plot(seq_along(values), values)

enter image description here