1
我已經在R中編寫了一個循環,並且希望使其運行速度更快。任務是計算數據幀(tibble)中time
列的增量值。皺褶是每個增量應取自上一行,其中level
列的值(範圍1-9)大於或等於當前行。我需要運行這約十億行,目前的性能大大低於每秒100萬行。所以我正在尋找至少一個數量級的加速。優化R循環
下面是代碼:
ref <- as.numeric(rep(NA, 9)) # separate reference timestamp per level
timedelta <- function(level, time) {
delta <- time - ref[level]
ref[1:level] <<- time
delta
}
mapply(timedelta, tl$level, tl$time)
如何作出這樣跑得快?
(我曾問過dplyr的背景下,同樣的問題在How to add flexible delta columns using dplyr?,但我沒能得到我所需要dplyr所以我在這裏再次要求的性能。)
我不完全理解你需要做什麼,但在迭代取決於前一次迭代的結果的情況下,我試試Rcpp – konvas
你是否嘗試過分析代碼以查看瓶頸在哪裏? –
對於大型數據集,您可以嘗試使用data.table(它比dplyr更快)以及foreach(允許您並行運行循環)。如果你發佈一個可重現的例子,你會在這裏得到更好的結果:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Henk