Оптимизация циклов в R - PullRequest
       0

Оптимизация циклов в R

0 голосов
/ 26 ноября 2018

Учитывая 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 

1 Ответ

0 голосов
/ 26 ноября 2018

примерно в 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...