由于交叉引用功能,我使用bookdown
代替rmarkdown
来生成动态报告。我要生成多个报告,因此我起草了一个R
脚本,在bookdown:render_book
循环中调用for
来生成所有报告。不幸的是,这是错误的。为简单起见,我构建了一个最小的例子:
要呈现的bookdown
文件(另存为index.Rmd
):
---
title: "test"
output: html_document
---
```{r test}
ext_var
```
build.R
:
ext_var <- "test.html"
bookdown::render_book("index.Rmd", output_file = ext_var) # it will call `rmarkdown::render`.
使用以下命令时:Rscript build.R
,它将生成以下错误消息:
$ Rscript build.R
Error in rmarkdown::render(main, output_format, ..., clean = clean, envir = envir, :
'ext_var'
Calls: <Anonymous> -> render_cur_session -> <Anonymous>
Please delete _main.Rmd after you finish debugging the error.
然后我将build.R
改为使用rmarkdown::render
代替:
ext_var <- "test.html"
rmarkdown::render("index.Rmd", output_file = ext_var)
没有任何错误。所以我想可能还有一些问题要解决。
sessionInfo()
:
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RevoUtils_11.0.0 RevoUtilsMath_11.0.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.17 bookdown_0.7 digest_0.6.15 rprojroot_1.3-2 backports_1.1.2
[6] magrittr_1.5 evaluate_0.10.1 stringi_1.1.7 rstudioapi_0.7 rmarkdown_1.10
[11] tools_3.5.0 stringr_1.3.1 xfun_0.1 yaml_2.1.19 compiler_3.5.0
[16] htmltools_0.3.6 knitr_1.20
还在rstudio/bookdown
存储库中提交了an issue #592。
答案 0 :(得分:2)
在对bookdown::render_book
函数进行仔细研究后,我发现了这个错误的真正原因。此函数设置了一个参数clean_envir
,其默认值为!interactive()
。这就是使用命令行工具编织bookdown
时环境变量消失的原因。解决此问题很简单,只需将clean_envir
设置为FALSE
,即
ext_var <- "test.html"
bookdown::render_book("index.Rmd", output_file = ext_var, clean_envir = FALSE)
然后它有效。
答案 1 :(得分:2)
作为you have discovered by yourself,问题是由您的默认render_book(clean_envir = TRUE)
引起的。
但是,请注意bookdown::render_book()
不适用于 bookdown 包中的输出格式。换句话说,您不应期望html_document
格式与render_book
一起使用。如果您需要交叉引用功能,请使用 bookdown 包中名称以2
结尾的输出格式(例如bookdown::html_document2
)和这些格式旨在与rmarkdown::render()
一起使用。有关详细信息,请参阅簿记簿中的Section 3.4。
答案 2 :(得分:0)
Bookdown需要多个Rmd文件,因此错误不在于Rscript
,而在于您的设置。
如果您有正确的减记设置,例如
edd@rob:~/git/bookdown-demo(master)$ ls
01-intro.Rmd 05-summary.Rmd _bookdown.yml preamble.tex
02-literature.Rmd 06-references.Rmd index.Rmd README.md
03-method.Rmd book.bib LICENSE style.css
04-application.Rmd bookdown-demo.Rproj _output.yml toc.css
edd@rob:~/git/bookdown-demo(master)$
然后运行
Rscript -e 'bookdown::render_book("index.Rmd")'
做你期望的事。由于您通常在rmarkdown::render()
中指定输出文件,因此我不确定书籍支持,因为输出文件只有_bookdown.yml
。