Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 跨不同文档类型缓存块_R_Knitr - Fatal编程技术网

R 跨不同文档类型缓存块

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文档,则缓存的图形不会被重新使用,并且执行速度非常慢。有没有办法对不同类型的文档重新使用缓存的图形?请考虑以下最

我使用的是RStudio的“预览”版本和 我有一个
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。 请看