r - 加速 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)
它工作正常,但速度很慢。有没有办法让它更快?
解决方案
您通常应该避免在 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
推荐阅读
- azure-devops - DevOps 发布从 QA 到 PRODUCTION
- schema - Flatbuffers Schema:联合向量不能使用 --binary
- c++ - 从 0 数到 N
- python - “POST /upload HTTP/1.1”415 - 视频上传问题
- regex - 这 --> [^]+ <-- RegEx 匹配什么?
- powershell - Powershell BitsTransfer 从远程会话
- msbuild - 开发时使用项目引用而不是 nuget 包?
- mysql - 如何根据外键选择mysql中的项目
- python - 如何使用带有变量的模块创建方程,然后将它们传递给另一个模块?
- scala - 在离线 Windows 机器上安装 sbt