R / Bookdown:在render_book()函数中指定rmd_files

问题描述 投票:0回答:3

我们在大学里经常使用

bookdown
来编写课程材料。我们在“_bookdown.yaml”中使用
rmd_files:
来指定要包含在书中的 rmd 文件。我们的预订项目往往会变得相当漫长和复杂,
_bookdown.yaml
最终看起来像这样:

rmd_files:
- index.Rmd
- folder1/subfolder1/file1.Rmd
- folder1/subfolder1/file2.Rmd
- folder1/subfolder2/file3.Rmd
- folder2/subfolder3/file4.Rmd
...

使用

_bookdown.yaml
指定文件有以下限制:

  • 它会导致大量重复(例如,每个子元素都会重复
    folder1
  • 复杂的结构隐含且晦涩
  • 仅选择要渲染的文件子集涉及体力劳动(假设我只想使用文件夹 1 中的所有文件)

因此,我们已转向在单独的 yaml 文件中描述文件结构,并根据我们的需求使用辅助函数来更新

_bookdown.yaml
。这个方法看起来有点笨拙,如果我们可以将文件向量传递给 render_book()
 而不是在 
_bookdown.yaml
 中指定 rmd 文件,那么它会更优雅。 
这可能吗?

注意:使用

render_book(..., preview = TRUE)

 不是解决方案,我们想使用一组特定的 rmd 文件重新渲染这本书。

r r-markdown knitr bookdown
3个回答
0
投票
你读过新的

Rmarkdown 食谱吗

这是书中的剪辑

enter image description here

如果您从子文件夹中提取所有 .RMD 并且与

index.RMD

 位于同一父目录中,则这将与您的目录匹配。

enter image description here

如果您相应地命名文件,那么您的书将以正确的顺序(数字)呈现。如果这样做,您将不必在 yaml 中命名每个 .RMD 文件。您只需渲染您的

index.RMD

 即可从您保存的 YAML 中获取指令


0
投票
您应该能够在您的

_bookdown.yml

 中使用此行来包含来自任何地方的任何文件(注意:括号、逗号和缩进!)

rmd_files: [ index.Rmd, folder1/subfolder1/file1.Rmd, folder1/subfolder1/file2.Rmd, folder1/subfolder2/file3.Rmd, older2/subfolder3/file4.Rmd ]
    

0
投票
在构建本书之前,您可以将

_bookdown.yml

 加载到内存中,更新 rmd_files 列表,然后重新写入。

degBDYML <- yaml.load_file('_bookdown.yml') rmd_files_list <- c('index.Rmd', 'something.md', 'else.md', paste0('folder1/', list.files(path = '.folder1'))) degBDYML$rmd_files <- rmd_files_list writeLines(as.yaml(degBDYML), con = '_bookdown.yml')
    
© www.soinside.com 2019 - 2024. All rights reserved.