如何在R中向量化此简单的for循环?

时间:2018-10-07 17:33:26

标签: 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系列函数还没有太多的经验,所以我认为我只需要看一个示例即可知道如何实现。谢谢

1 个答案:

答案 0 :(得分:4)

尝试

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

请注意,由于随机数生成器中的增量会有所不同,所以相加的结果会略有不同,但这只是次要的细节。关键是不需要循环。