块的时间?

时间:2014-07-06 11:20:53

标签: r knitr

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

一个想法就是例如在system.time()中包装每个块并在每个块输出下面或在边距中报告system.time ...

再次感谢Yihui这样出色的软件。

1 个答案:

答案 0 :(得分:11)

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

```{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)
```

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