Ускорить функцию R - PullRequest
2 голосов
/ 06 мая 2019

Я сделал эту функцию для подготовки моего количественного кадра данных / матрицы для следующих операций:

fun<-function(x,i) {
    if(i<nrow(x)) {
      x[i+1,]<-x[i,]+x[i+1,]
      fun(x,i+1)
    }
    else return(x)
  }
library(vegan)
data(mite)
x<-fun(mite,1)

Работает нормально, но медленно. Есть ли способ сделать это быстрее?

1 Ответ

3 голосов
/ 06 мая 2019

Обычно вы должны избегать рекурсии в R. Попробуйте использовать cumsum вместо:

fun1 <- function(x, i) {

  f <- function(x, i) {
    y <- x
    y[i:length(y)] <- cumsum(y[i:length(y)])
    y
  }

  x <- as.matrix(x)
  apply(x, 2, f, i = i) 
}

x <- matrix(rnorm(10),ncol = 2)
all.equal(fun(x, 3), fun1(x, 3))
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...