加快R功能

时间:2019-05-06 08:39:48

标签: r function

我做了这个功能是为了准备我的定量数据框/矩阵以便进行下一步操作:

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 个答案:

答案 0 :(得分:3)

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