我做了这个功能是为了准备我的定量数据框/矩阵以便进行下一步操作:
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)
它工作正常,但速度较慢。有什么方法可以使其更快?
答案 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