【问题标题】:How should I vectorize this simple for loop in R?我应该如何在 R 中对这个简单的 for 循环进行矢量化?
【发布时间】: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


    【解决方案1】:

    试试

    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
    

    请注意,加法的结果会略有不同,因为随机数生成器中的增量会有所不同,但这是一个小细节。关键是不需要循环。

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 2015-06-25
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      相关资源
      最近更新 更多