【问题标题】:How do I knit child documents with parameters into a main RMarkdown document?如何将带有参数的子文档编织到主 RMarkdown 文档中?
【发布时间】:2022-01-10 16:41:50
【问题描述】:

我有一个参数化的 RMarkdown 文件,parameterized.Rmd,包含以下内容。

---
title: "Parameterized report"
output: html_document
params:
  input_df: NULL
---
```{r sec1}
head(params$input_df[, 1:2])
```

我可以使用rmarkdown::render 从控制台编织它,为不同的数据帧输入生成不同的文档。这按预期工作。

rmarkdown::render("parameterized.Rmd", 
                params = list(input_df = mtcars), 
                output_file = "cars.html")

rmarkdown::render("parameterized.Rmd", 
                  params = list(input_df = iris), 
                  output_file = "iris.html")

我想让这些结果中的每一个都成为公共文档的子文档。我的第一次尝试是使用knitr::knit_child,但它没有将params 作为参数。所以这失败了。

---
title: "Main report"
output: html_document
---


```{r test-cars}
knitr::knit_child("parameterized.Rmd", envir = environment(), quiet = T,
                  params = list(input_df = mtcars))
```

如何将需要参数的子文档组合在一起?

【问题讨论】:

    标签: r-markdown parameter-passing knitr


    【解决方案1】:

    什么对我有用(源自documentation,一旦我正确理解它。):

    不使用 YAML 标头中的 params 字段,而是在主文档中设置参数的值,并在 knitr::knit_child 的输出上调用 cat。以下文件达到了预期的效果。

    参数化.Rmd

    ---
    title: "Parameterized report"
    output: html_document
    ---
    
    ```{r}
    head(df[, 1:2])
    ```
    

    main.Rmd

    ---
    title: "Main report"
    output: html_document
    ---
    
    # mtcars
    ```{r mtcars, echo=FALSE, results='asis'}
    df <- mtcars 
    cat(
      knitr::knit_child('parameterized.Rmd', envir = environment(), quiet = TRUE)
      )
    ```
    
    # iris
    ```{r iris, echo=FALSE, results='asis'}
    df <- iris 
    cat(
      knitr::knit_child('parameterized.Rmd', envir = environment(), quiet = TRUE)
      )
    ```
    

    Knitting main.Rmd 将参数化报告应用于每个数据帧。

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2019-02-05
      • 2023-04-07
      • 1970-01-01
      • 2018-09-03
      • 2021-02-01
      • 1970-01-01
      • 2014-09-26
      • 2019-11-03
      相关资源
      最近更新 更多