如何在R Markdown的YAML元数据中创建多级字典?

bal*_*lin 5 yaml r rstudio knitr r-markdown

使用单级列表/字典来参数化rmarkdown文档时:

---
params:
  first_level: ~
---

```{r}
params
```
Run Code Online (Sandbox Code Playgroud)

和针织返回预期的

## $first_level
## NULL
Run Code Online (Sandbox Code Playgroud)

我无法使用多级列表/字典作为编织

---
params:
  first_level:
    second_level: ~
---

```{r}
params
```
Run Code Online (Sandbox Code Playgroud)

生产Error: no value field specified for YAML parameter 'first_level' Execution halted,我期待的地方

## $first_level
## $first_level$second_level
## NULL
Run Code Online (Sandbox Code Playgroud)

是否真的只支持一个级别列表或者我搞砸了什么?

正如我在下面评论的那样,可以使用预期的输出来实现

---
params:
  first_level: !r list(second_level = NULL)
---

```{r}
params
```
Run Code Online (Sandbox Code Playgroud)

但是为什么要用yaml它代替参数化代码块呢?

Yih*_*Xie 2

params是 R Markdown 的特殊字段,您必须使用两种方式之一来指定参数的值:如果该值不是列表(例如标量),则可以使用正常的 YAML 语法指定它;但是,如果它是一个列表,R Markdown 需要一个名为 的子字段value,并且必须在此子字段中指定值。在您的情况下,您必须使用一个value字段,例如

---
params:
  first_level:
    value:
      second_level: ~
---

```{r}
params
```
Run Code Online (Sandbox Code Playgroud)

目前这是设计使然