块的时间?

Ste*_*len 7 r knitr

有没有办法报告计算每个块需要多少时间?我正在从一些大型脚本创建一个文档,很高兴知道时间在哪里.我确实使用了缓存功能,所以当缓存对象时,使用文档的速度并不太慢,但我想隔离缓慢的块,看看除非绝对需要,否则我可以阻止它们被重新计算.

一种想法是例如将每个块包装在system.time()中并报告每个块输出下面的system.time,或者在边缘...

再次感谢Yihui这样优秀的软件.

Yih*_*Xie 12

您可以定义一个块挂钩函数来执行此操作.这是一个简单的例子:

```{r setup, include=FALSE}
knitr::knit_hooks$set(timeit = local({
  now = NULL
  function(before, options) {
    if (before) {
      now <<- Sys.time()
    } else {
      res = difftime(Sys.time(), now)
      now <<- NULL
      # use options$label if you want the chunk label as well
      paste('Time for this code chunk:', as.character(res))
    }
  }})
)
```

Test it:

```{r test-a, timeit = TRUE}
Sys.sleep(2)
```
Run Code Online (Sandbox Code Playgroud)

根据您使用的文档格式,您可能希望格式化钩子返回的字符串.从块钩子返回的字符结果与原始输出组合,并忽略其他类型的输出.

  • 有没有办法让它适用于交互式运行的sql块(ctlr-shit-enter或单击块标题上的播放图标)?,...,我猜这个特定的解决方案不起作用,因为它定义了一个块钩子,只有在您实际编织文档时才起作用。 (3认同)