我正在使用
创建一个网站 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
存在):
Rmarkdown 1.10和1.10.14(截至10月31日的开发版本)都会发生这种情况。
在一个更复杂的现实生活示例中,即使我切换了文档顺序,图也不会出现,但是我希望这个问题的答案将对更复杂的问题有所帮助。
更新:除了@giocomai的建议外,一种解决方法是将test1.Rmd编译两次:
Rscript -e "rmarkdown::render_site()"
Rscript -e "rmarkdown::render_site('test1.Rmd')"
即使您编译多个单个文件,这似乎也可行。大概在单文件情况下,清理工作不太积极。
答案 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)
。
这可以解决您的问题,但可能应该有更优雅的解决方案。