Как использовать инструмент командной строки Rscript для создания книги в bookdown

Из-за функции перекрестных ссылок я использую 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  

Также подал вопрос № 592 в rstudio/bookdown репозиторий.

3 ответа

Решение

Как вы сами обнаружили, проблема была вызвана по умолчанию render_book(clean_envir = TRUE) в твоем случае.

Однако, пожалуйста, обратите внимание, что bookdown::render_book() не должен работать с выходными форматами, отличными от указанных в пакете bookdown. Другими словами, вы не должны ожидать html_document формат для работы render_book, Если вам нужна функция перекрестных ссылок, пожалуйста, используйте те выходные форматы, имена которых заканчиваются на 2 в пакете скидок (например, bookdown::html_document2), и эти форматы предназначены для работы с rmarkdown::render(), См. Раздел 3.4 в книге скидок для получения дополнительной информации.

После тщательного исследования 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)

Тогда это работает.

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")'

делает то, что вы ожидаете. Я не уверен, что поддерживает bookdown с учетом выходного файла rmarkdown::render() как вы обычно указываете в _bookdown.yml,

Другие вопросы по тегам