【问题标题】:Timing R Chunk in R MarkDown/Notebook (Equivalent of %%timeit in python)在 R MarkDown/Notebook 中计时 R 块(相当于 python 中的 %%timeit)
【发布时间】:2017-07-06 11:25:22
【问题描述】:

我正在寻找一种优雅的方式来定时执行 R 块,最好在后台自动运行块多次。 (Python notebook 中的魔术函数%%timeit 正是这样做的)

我知道有几种方法可以为一个 R 函数或一堆 R 代码计时,并且上面也有 few SO questions。所有方法都在this 文章中进行了描述。

但是,它们中的大多数不复制 r 代码,并且可以选择复制的代码(如 system.timemircobenchbark)非​​常适合在函数上使用,而不是在代码块上使用。 (或者可能是我不明白)

tictoc 对我来说效果很好,除了它只会为单次执行提供运行时间,但没有选择运行 1000 次和平均运行时间。 (又是 %%timeit 的作用)

【问题讨论】:

  • 只需将代码放在大括号 { your code here }system.timemicrobenchmark 中即可。像system.time({block of code}) 一样,它可以跨越多行。您还可以将其包装在一个函数中并通过名称调用该函数以获得更简洁的测试界面。
  • 谢谢@lmo。是的,这就是我认为的解决方法。我希望会有更优雅的方式。很高兴现在得到确认。
  • 可能存在一个更奇特的带有包的方法,但我就是这样做的。实现起来很简单。你可以看看profVis 包。如果我没记错的话,它会生成可能很吸引人的图表等。

标签: r runtime timing chunks timeit


【解决方案1】:

使用tictoc,可以在循环中记录时间并对结果进行平均。

library(tictoc)
tic.clearlog()
for (x in 1:10) {
    # passing x to tic() makes its value to become a label 
    # at time of the matching toc() call.
    tic(x)
    Sys.sleep(1)
    # When log = TRUE, toc() pushes the measured timing to a list
    # quiet = TRUE prevents from printing the timing
    toc(log = TRUE, quiet = TRUE)
}

获取toc() 的结果作为格式化文本进行打印。

log.txt <- tic.log(format = TRUE)

以原始格式提取包含测量值的列表。

log.lst <- tic.log(format = FALSE)

由于数据已经提取,清除tictoc日志。

tic.clearlog()

将列表元素转换为计时。 列表的每个元素都有一个开始 (tic) 和结束 (toc) 时间戳。

timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic))

计算平均循环时间。

mean(timings)
# [1] 1.001

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2020-10-15
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-08-25
    • 2019-07-14
    • 2012-05-27
    • 2014-12-22
    相关资源
    最近更新 更多