【发布时间】:2017-06-01 22:24:34
【问题描述】:
我在 R 中编写了一个循环,我想让它运行得更快。任务是计算数据框(tibble)中time 列的增量值。问题是每个增量应该取自level 列的值(范围1-9)更大的前一行大于或等于当前行。我需要运行大约 10 亿行,而当前的性能远低于每秒 100 万行。所以我正在寻找至少一个数量级的加速。
代码如下:
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)
我怎样才能让它跑得快?
(我在How to add flexible delta columns using dplyr? 上就 dplyr 提出了同样的问题,但我没有设法通过 dplyr 获得所需的性能,所以我在这里再次询问。)
【问题讨论】:
-
我不完全明白你需要做什么,但在迭代取决于前一次迭代的结果的情况下,我会尝试 Rcpp
-
您是否尝试过分析代码以查看瓶颈在哪里?
-
对于大型数据集,您可以尝试结合使用 data.table(比 dplyr 快)和 foreach(允许您并行运行循环)。如果您发布可重现的示例,您将在这里获得更好的结果:stackoverflow.com/questions/5963269/…
标签: r