【发布时间】:2015-11-21 17:32:07
【问题描述】:
不幸的是,我是过度循环的受害者。我相信可以通过在 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 有几百万个值,另外我还有几个类似的计算。因此,如果有人能提出一个有效的解决方案,我将不胜感激。
最好, 丹尼尔。
【问题讨论】: