R 跨不同文档类型缓存块
我使用的是RStudio的“预览”版本和 我有一个R 跨不同文档类型缓存块,r,knitr,R,Knitr,我使用的是RStudio的“预览”版本和 我有一个Rmd文件,用于生成html、pdf和docx文档。我设置了如下选项: opts_chunk$set(cache=TRUE, comment="",message=FALSE, warning = FALSE) cache=TRUE在我尝试重新创建具有相同扩展名的文档时效果很好,但是如果我尝试使用相同的Rmd文件来创建pdf或docx文档,则缓存的图形不会被重新使用,并且执行速度非常慢。有没有办法对不同类型的文档重新使用缓存的图形?请考虑以下最
Rmd
文件,用于生成html、pdf
和docx
文档。我设置了如下选项:
opts_chunk$set(cache=TRUE, comment="",message=FALSE, warning = FALSE)
cache=TRUE
在我尝试重新创建具有相同扩展名的文档时效果很好,但是如果我尝试使用相同的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 pdf
,cache=TRUE
将被忽略。显然,这个最小的示例并不明显,但是使用我的文件和大约30个图形,它的速度会降低。这是因为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 = '_'))
})
```
注意,这只会确保缓存分别适用于输出格式。您不能跨不同的输出格式共享缓存数据库,除非您为所有输出格式设置了相同的块选项,这是不实际的,因此我想您必须接受这种次优解决方案。尝试cache=1而不是cache=T。 请看