在 RMarkdown 文档中包含 YAML 文件

mer*_*erv 3 yaml r knitr r-markdown

我有一个 RMarkdown 文档,其中包含示例 YAML 文件,当前格式为:

```{yaml}
name: r40_tidyverse
channels:
  - conda-forge
  - nodefaults
dependencies:
  - r-base=4.0
  - r-tidyverse
```
Run Code Online (Sandbox Code Playgroud)

这会渲染(编织)成 HTML,并带有漂亮的 YAML 语法突出显示。

针织结果 渲染的 YAML 代码

我想将其作为外部 YAML 文件包含在其中,而不是上面的内容,例如位于envs/r40_tidyverse.yaml. 我尝试过使用

```{yaml child="envs/r40_tidyverse.yaml"}
```
Run Code Online (Sandbox Code Playgroud)

虽然这会正确加载文件,但生成的 HTML 只是一个<p></p>包含文件内容的元素。

针织结果 未渲​​染的 YAML 文件

这是不可取的。

如何将外部 YAML 文件加载到 RMarkdown 文档中并实现类似于直接包含 YAML 代码块的语法突出显示?

Yih*_*Xie 5

我认为最简单的方法是在内联 R 表达式中读取外部文件,例如,

```yaml
`r xfun::file_string('envs/r40_tidyverse.yaml')`
```
Run Code Online (Sandbox Code Playgroud)

请注意,您不应该使用 ```{yaml}(即不要添加{}yaml),因为这会将其含义更改为knitr

  • 使用花括号,这意味着一个代码块,并且knitr语言引擎需要评估该代码块(但还没有yaml引擎,并且您的第一个示例只是偶然工作的)。
  • 如果没有大括号,则表示一个普通的代码块,不会被knit处理。