块中生成的图不与rmarkdown :: render_site()一起显示

时间:2018-11-01 00:00:27

标签: r r-markdown

我正在使用

创建一个网站

Rscript -e "rmarkdown::render_site()"

我正在生成html和pdf版本的文档。除非在pdf文档之前生成pdf doc,否则不会出现大块生成的图。

以下是文件:

index.Rmd

---
title: "My Website"
---

* [Test1 page](test1.html)

* [Test2 page](test2.html)

_site.yml

name: "my-website"

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()
```

通过render_site()运行Rscript后,test1.html为空---没有test1_files子目录。但是,test2.html显示此图(当然test2_files存在):

enter image description here

Rmarkdown 1.10和1.10.14(截至10月31日的开发版本)都会发生这种情况。

在一个更复杂的现实生活示例中,即使我切换了文档顺序,图也不会出现,但是我希望这个问题的答案将对更复杂的问题有所帮助。

更新:除了@giocomai的建议外,一种解决方法是将test1.Rmd编译两次:

Rscript -e "rmarkdown::render_site()"
Rscript -e "rmarkdown::render_site('test1.Rmd')"

即使您编译多个单个文件,这似乎也可行。大概在单文件情况下,清理工作不太积极。

1 个答案:

答案 0 :(得分:2)

我可以复制您的问题,我认为这与以下事实有关:rmarkdown::render()在创建pdf输出后清除了文件,因为它认为这些文件无用,而render_site复制了仅在呈现所有输出类型之后,才将文件复制到_site文件夹中。

rmarkdown::render()中,有一个设置clean=FALSE的选项,但似乎rmarkdown::render_site()不可用,因为参数没有传递给render

我认为值得将其作为Rmarkdown的一个问题提出,因为通过争论不应该太困难。

作为一种解决方法,您可以在相关的Rmd文档的块中强制使用cache = TRUE。因此,例如,您的test1.Rmd中的代码块如下所示:

```{r, message=FALSE, echo=FALSE, cache = TRUE}
library(ggplot2)
ggplot(mtcars, aes(x=mpg, y=disp)) + geom_point()
```

请注意块选项中的cache = TRUE。启用缓存后,将保留该文件夹并将其正确复制到_site文件夹中。

您还可以为所有块设置knitr::opts_chunk$set(cache = TRUE)

这可以解决您的问题,但可能应该有更优雅的解决方案。