跨不同文档类型缓存块

时间:2014-04-14 00:52:05

标签: r knitr

我正在使用RStudio的'预览'版本 我有一个Rmd文件,用于生成html,pdfdocx文档。我已经设置了这样的选项:

opts_chunk$set(cache=TRUE, comment="",message=FALSE, warning = FALSE)
当我尝试重新创建具有相同扩展名cache=TRUE的文档但是如果我尝试使用相同的eg.htm文件创建Rmd时,

pdf效果很好或docx文档,然后缓存的数字不会被重复使用并且执行速度非常慢。有没有办法重新使用不同类型文档的缓存数字?请考虑以下最小例子:

{r,echo=FALSE}
library(knitr)
opts_chunk$set(cache=TRUE, comment="",message=FALSE, warning = FALSE)


{r, echo=FALSE}
   plot(cars)

如果我选择knit html选项,则会创建html文档并重新使用代码,但点击knit pdfcache=TRUE会被忽略。显然,这个最小的例子并不明显,但使用我的文件大约有30个图形,它完全变慢了。

2 个答案:

答案 0 :(得分:2)

这是因为 rmarkdown 包为不同的输出格式设置了不同的块选项,例如PDF输出使用块选项dev='pdf',HTML输出使用dev='png'。块选项的更改将使缓存无效。

您可以做的一件事是为不同的输出格式创建不同的缓存目录,例如

```{r setup, include=FALSE}
library(knitr)
local({
  to = opts_knit$get('rmarkdown.pandoc.to')  # output format
  opts_chunk$set(cache.path = paste('cache', to, sep = '_'))
})
```

请注意,这只会确保缓存分别适用于输出格式。您不能跨不同的输出格式共享缓存数据库,除非您为所有输出格式设置相同的块选项,这是不切实际的,所以我猜你必须接受这个次优解决方案。

答案 1 :(得分:0)

尝试 cache=1 而不是 cache=T。 请参阅the cache invalidation rules