0
我想使用sapply的方式,从sapply输出的最新值变成sapply的下一个输入。在下面的例子中,我创建了向量a =(1,NA,NA,NA),并希望sapply返回向量a =(1,1,2,2)。基本上,对于[2:4],我想输出为2-1 = 2,3-1 = 2,4 = 2 = 2使用最后的sapply输出作为下一个输入
a <- NA
a[1] <- 1
a[2:4] <- sapply(2:4, function(x) x- a[x-1])
如果你运行它,你看到它返回一个=(1,1,NA,NA),因为它使用现有的矢量而不是“现场”矢量。
一个for循环,它的工作原理是这样的:
a <- NA
a[1] <- 1
for (ii in 2:4){
a[ii] <- ii-a[ii-1]
}
我想sapply使用的原因是因为我真正的功能是复杂的,它会运行在大型数据集,我不想等待很长时间。
谢谢。
使用'sapply'而不是''''''循环写得很好,你不可能实现显着的速度提升。我不明白'2-1 = 2,3-1 = 2,4 = 2 = 2' –
'sapply'不会这样做,即使它可能不会比一口井好得多书面,预先分配'for'循环。有可能你的问题可能是矢量化的,但是如果没有看到你的“真实”功能就不可能知道。否则,对于计算强烈依赖于以前的迭代,我强烈建议** Rcpp **的速度增益。 – joran
@ docendo对不起,这是一个错字。应该是2-1 = 2,3-1 = 2,4-2 = 2。我意识到这并不清楚。显示的循环覆盖了它。 –