【问题标题】:Vectorizing a loop in R向量化 R 中的循环
【发布时间】:2010-11-13 11:57:30
【问题描述】:

必须有一种简单的方法来矢量化R中的以下循环,但我看不到它。

w <- numeric(10)
z <- rnorm(20)
v <- c(sample(1:10,10),sample(1:10,10)) #Random ordering of c(1:10,1:10)
for(i in 1:10)
    w[i] <- sum(z[v==i])

【问题讨论】:

    标签: r loops


    【解决方案1】:

    另一种方法

    w = rowsum(z, v)
    

    【讨论】:

    • 谢谢。我什至不知道这个功能的存在。也超级快。
    • 我也不熟悉它,直到我不得不探索加速我的代码的方法。那时我遇到了一大堆函数:(1)rowsum,(2)max.col 等,它们可以加速通常使用 apply 系列实现的特定操作。
    【解决方案2】:

    您可以使用聚合:
    聚合(z, by=list(v), sum)

    【讨论】:

    • 我倾向于认为聚合相当于循环。它没有矢量化的相同性能提升。
    • 聚合比我的循环快很多,但远不及 rowsum()
    • @Rob 正如 Shane 所说,聚合只是调用 lapply;而 rowsum 可能是对 C 函数的直接调用。
    猜你喜欢
    • 2016-08-10
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2019-07-22
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多