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