假设我有一个名为index.Rmd的主R-Markdown文件和另一个名为child.Rmd的R-Markdown文件。如果我想基于条件params$value1 > params$value2
包含R-Markdown文件child.Rmd,则可以将以下代码添加到文件index.Rmd
condition <- params$value1 > params$value2
filepathToChild <- "/home/user/child.Rmd"
```{r conditional_print,
child=filepathToChild , eval = condition
}
```
使用bookdown,我可以创建一个名为_bookdown.yml的文件,其内容如下:将文件child.Rmd的内容包括在文件索引的内容之后。Rmd:
rmd_files: ["index.Rmd", "child.Rmd"]
如何根据条件params$value1 > params$value2
将book.Rmd文件的内容包括在书本中?
答案 0 :(得分:2)
我想不出在yml中执行此操作的解决方案,但是您可以通过编程方式创建该yml文件,并将其与渲染过程结合起来。
只需创建一个简单的脚本即可生成.yml文件并进行渲染:
# compile_my_book.R
# get the parameters
param1 <- commandArgs(trailingOnly = TRUE)[1]
param2 <- commandArgs(trailingOnly = TRUE)[2]
# just some dummy yml from bookdown examples
my_yml <- paste0(
"book_filename: 'my-book.Rmd'
before_chapter_script: ['script1.R', 'script2.R']
output_dir: 'book-output'
clean: ['my-book.bbl', 'R-packages.bib']"
)
# list the files
# (here you could also use list.files to get them automatically, sorting them etc.)
my_files <- c("chapter01.Rmd", "chapter02.Rmd", "References.Rmd")
# add your conditional files
if (param1 > param2) my_files <- c(my_files, "conditional.Rmd")
# create the _bookdown.yml
cat(my_yml,
"\nrmd_files: ['", paste0(my_files, collapse = "', '"), "']",
file = "_bookdown.yml", sep = "")
# render your book with the arguments you want (excluding the values you want to check for)
bookdown::render_book('index.Rmd', 'bookdown::gitbook')
然后您可以从命令行编译该书:
Rscript compile_my_book.R value1 value2
(或创建一个makefile或类似的东西来为您运行多件事)
因此,运行Rscript compile_my_book.R 1 2
不会添加条件文件,但是Rscript compile_my_book.R 2 1
会添加条件文件。
这有点棘手,但是我正在使用类似的工作流程,通过从多个来源读取数据,检查某些条件并创建配置文件,为我使用的某些Web应用程序创建长的.xml-config文件。