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。我意識到這並不清楚。顯示的循環覆蓋了它。 –