在 RMarkdown 文档中包含 YAML 文件

Include YAML file in RMarkdown document

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

```{yaml}
name: r40_tidyverse
channels:
  - conda-forge
  - nodefaults
dependencies:
  - r-base=4.0
  - r-tidyverse
```

这会将 (knits) 呈现为 HTML,并带有漂亮的 YAML 语法突出显示。

针织结果

我想将其作为外部 YAML 文件包含在 envs/r40_tidyverse.yaml 中,而不是上述文件。我试过使用

```{yaml child="envs/r40_tidyverse.yaml"}
```

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

针织结果

这是不可取的。

如何将外部 YAML 文件加载到 RMarkdown 文档中,并实现类似于直接包含 YAML 代码块时的语法高亮?

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

```yaml
`r xfun::file_string('envs/r40_tidyverse.yaml')`
```

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

  • 带花括号的意思是代码块,knitr语言引擎需要对代码块求值(但目前还没有yaml引擎,你的第一个例子只是偶然成功了)。
  • 没有花括号表示普通代码块,不会被knitr处理。