首页 > 解决方案 > R中循环的优化

问题描述

给定r的是一个带有lm列的矩阵,我想将下面的代码优化为最有效的。有任何想法吗?

    set.seed(123456)
    system.time(expr = {
      r = matrix(rnorm(15 * 1500), ncol = 15)
      s = 0
      lm = ncol(r)
##################
      for (j in 1:lm) {
        cm  = combn(lm, j)
        for (i in 1:ncol(cm)) {
          val = apply(r, 1, function(x) {
            prod(x[cm[, i]])
          })
          s = s + (-1) ^ (j + 1) * val
        }
      }
    }
###############
)

  user  system elapsed 
 110.56    0.07  111.37 

标签: r

解决方案


大约快 65 倍

    library(Rfast)
    set.seed(123456)
    system.time(expr = {
      r = matrix(rnorm(15 * 1500), ncol = 15)
      s = 0
      lm = ncol(r)
      for (j in 1:lm) {
        val = sapply(
          X = combn(lm, j, simplify = FALSE),
          FUN = function(i) {
            val = (-1) ^ (j + 1)  * rowprods(r[, i, drop = FALSE])
          }
        )
        s = s + rowSums(val)
      }
    })

    user  system elapsed 
   1.70    0.09    1.84 

推荐阅读