[英]R Applying user defined function to vector; Indexing within sapply()
不幸的是,我是过度循环的受害者。 我相信可以通过在R中使用sapply()函数来改善以下计算。但是,我在索引方面遇到了一些问题。 以下是分子模拟每个时间步完成的功的计算。 这是循环形式的解决方案:
F1 <- c(0.38603555, 0.06516336, 0.55603406, 0.52901992)
wd <- vector(mode="numeric", length=length(F1))
ts <- 0.198
ve <- 0.0015
for(i in 1:length(F1)){
if(i == 1){
wd[i] <- (F1[i] * ve * ts)
} else {
wd[i] <- wd[i-1] + (F1[i] * ve * ts)
}
}
工作完美。 我以sapply()形式进行的错误尝试如下:
F1[1] <- (F1[1] * ve * ts)
wd <- sapply(F1[2:length(F1)], function(x) x[-1] + (x * ve * ts))
我相信问题的根源在于索引x。 返回类应该是一个向量。
实际上,F1具有数百万个值,此外,我有一些与此类似的计算。 因此,如果有人可以提出有效的解决方案,我将不胜感激。
最好,丹尼尔。
在这里使用sapply
没有性能优势。 这只是另一个循环。 而是使用向量化:
all.equal(wd,
cumsum(F1 * ve * ts)
)
#[1] TRUE
这会在已编译的代码中进行循环,因此速度快了多个数量级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.