有没有办法报告计算每个块需要多少时间?我正在从一些大型脚本创建一个文档,很高兴知道时间在哪里。我确实使用了缓存功能,所以当缓存对象时,使用文档的速度并不太慢,但是我想隔离缓慢的块,看看如何阻止它们被重新计算,除非绝对需要
一个想法就是例如在system.time()中包装每个块并在每个块输出下面或在边距中报告system.time ...
再次感谢Yihui这样出色的软件。
答案 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)
```
根据您使用的文档格式,您可能希望格式化钩子返回的字符串。从块钩子返回的字符结果与原始输出结合,忽略其他类型的输出。