【发布时间】:2019-03-12 11:10:48
【问题描述】:
要矢量化的循环:
n = 1000000
x = numeric(n)
for (I in 1:n) x[i] = rpois(1, 3) + rpois(1, 5)
原版太慢了,我对 for 循环或 apply 系列函数还没有太多经验,所以我想我只需要看一个例子来说明如何做到这一点,我就明白了。谢谢
【问题讨论】:
标签: r for-loop vectorization apply lapply
要矢量化的循环:
n = 1000000
x = numeric(n)
for (I in 1:n) x[i] = rpois(1, 3) + rpois(1, 5)
原版太慢了,我对 for 循环或 apply 系列函数还没有太多经验,所以我想我只需要看一个例子来说明如何做到这一点,我就明白了。谢谢
【问题讨论】:
标签: r for-loop vectorization apply lapply
试试
x = rpois(n, 3) + rpois(n, 5)
rpois(n,3) 已经创建了许多平局,因此无需循环。
要查看此内容,请注意以下几点:
set.seed(42)
n <- 10
x = numeric(n)
for (i in 1:n){
x[i] <- rpois(1, 3)
}
set.seed(42)
y <- rpois(n, 3)
all.equal(x,y)
[1] TRUE
请注意,加法的结果会略有不同,因为随机数生成器中的增量会有所不同,但这是一个小细节。关键是不需要循环。
【讨论】: