我正在用
创建一个网站Rscript -e "rmarkdown::render_site()"
我正在生成文档的 html 和 pdf 版本。除非在 html 文档之前生成 pdf 文档,否则不会出现在 block 中生成的图。
文件如下:
index.Rmd
---
title: "My Website"
---
* [Test1 page](test1.html)
* [Test2 page](test2.html)
_site.yml
名称:“我的网站”
test1.Rmd(先生成html)
---
output:
html_document: default
pdf_document: default
---
```{r, message=FALSE, echo=FALSE}
library(ggplot2)
ggplot(mtcars, aes(x=mpg, y=disp)) + geom_point()
```
test2.Rmd(先生成pdf)
---
output:
pdf_document: default
html_document: default
---
```{r, message=FALSE, echo=FALSE}
library(ggplot2)
ggplot(mtcars, aes(x=mpg, y=disp)) + geom_point()
```
通过Rscript
运行render_site()
后,test1.html
是空白---没有test1_files
子目录。但是,test2.html
显示了这个图(当然 test2_files
存在):
Rmarkdown 1.10 和 1.10.14(截至 10 月 31 日的开发版本)都会发生这种情况。
在一个更复杂的现实生活中的例子中,即使我切换文档顺序也不会出现情节,但我希望这个问题的答案能帮助解决更复杂的问题。
更新:除了@giocomai 的建议之外,解决方法是编译 test1.Rmd 两次:
Rscript -e "rmarkdown::render_site()"
Rscript -e "rmarkdown::render_site('test1.Rmd')"
即使您编译多个单个文件,这似乎也能正常工作。据推测,在单文件情况下,清理工作不那么激进。
最佳答案
我可以复制你的问题,我认为这与 rmarkdown::render()
在创建 pdf 输出后清理文件的事实有关,因为它认为这些文件是无用的,并且 render_site
仅在所有输出类型都已呈现后才将文件复制到 _site
文件夹。
在 rmarkdown::render()
中有一个设置 clean=FALSE
的选项,但它似乎不适用于 rmarkdown::render_site ()
,因为参数不会传递给 render
。
我认为将它作为一个问题提交给 Rmarkdown 是值得的,因为忽略这个论点应该不会太困难。
作为解决方法,您可以在相关 Rmd 文档的 block 中强制 cache = TRUE
。因此,例如,您的 test1.Rmd 中的代码块如下所示:
```{r, message=FALSE, echo=FALSE, cache = TRUE}
library(ggplot2)
ggplot(mtcars, aes(x=mpg, y=disp)) + geom_point()
```
注意 block 选项中的 cache = TRUE
。启用缓存后,文件夹将被保留并正确复制到 _site
文件夹。
您还可以为所有 block 设置 knitr::opts_chunk$set(cache = TRUE)
。
这解决了您的问题,但可能应该有更优雅的解决方案。
关于r - block 中生成的图不会出现在 rmarkdown::render_site() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53093495/