我一直试图避免R
中的for循环。但是,我在使用lapply
和replicate
时遇到了问题,因为我获得的列表的顺序不是顺序的。例如,以下代码:
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的顺序排序?谢谢!
答案 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)