r - 跨不同文档类型缓存 block

标签 r knitr

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

opts_chunk$set(cache=TRUE, comment="",message=FALSE, warning = FALSE)

cache=TRUE 在我尝试重新创建具有相同扩展名 eg.htm 的文档时效果很好,但如果我尝试使用相同的 Rmd 文件来创建 pdfdocx 文档,然后缓存的图形不会被重新使用并且执行速度非常慢。有没有办法为不同类型的文档重新使用缓存的图形?请考虑以下最小示例:

{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 个图形,它完全减慢了速度。

最佳答案

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

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

```{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 = '_'))
})
```

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

关于r - 跨不同文档类型缓存 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23050320/

相关文章:

r - 使用lapply中的特定列计算多个回归分析

r - GitHub 中的 Markdown 公式展示

r - 使用 express 在 R Markdown 中格式化表格

r - linux 命令行中的 knitr

r - 添加代码块而不执行它

r - .rmd 文件的访问名称并在 R 中使用

旋转辅助轴标签的文本

r - 一种不太敏感的序列化方法

R:列表 2 中有多少列表 1 的元素/出现次数

r - 如何在 R 中创建一个数据框,当其他列之一发生更改时自动更新列?