首页 > 解决方案 > 加速 R 函数

问题描述

我做了这个函数来准备我的量化数据框/矩阵以进行下一步操作:

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)

它工作正常,但速度很慢。有没有办法让它更快?

标签: rfunction

解决方案


您通常应该避免在 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

推荐阅读