提问人:Rob Creel 提问时间:1/11/2022 更新时间:11/17/2023 访问量:1835
如何将带有参数的子文档编织到主 RMarkdown 文档中?
How do I knit child documents with parameters into a main RMarkdown document?
问:
我有一个参数化的 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))
```
如何将需要参数的子文档编织在一起?
答:
12赞
Rob Creel
1/13/2022
#1
什么对我有用(一旦我正确理解了它,就会从文档中得出)。
不要使用 YAML 标头中的字段,而是设置主文档中的参数值并调用 的输出。以下文件达到了预期的结果。params
cat
knitr::knit_child
参数。RMD的
---
title: "Parameterized report"
output: html_document
---
```{r}
head(df[, 1:2])
```
主要。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
0赞
Monkj_
11/16/2023
#2
如果您在手动添加变量的子环境中运行子文档,则实际上也可以“覆盖”子文档中的参数。看起来子文档中 YAML 中设置的参数不会被使用,如果你 .所以这应该有效:params
knitr::knit_child()
参数。RMD的
---
title: "Parameterized report"
output: html_document
params:
input_df: NULL
---
```{r sec1}
head(input_df[, 1:2])
```
主要。RMD的
---
title: "Main report"
output: html_document
---
# mtcars
```{r mtcars, echo=FALSE, results='asis'}
e1 <- new.env()
e1$params$input_df <- mtcars
cat(
knitr::knit_child('parameterized.Rmd', envir = e1, quiet = TRUE)
)
```
# iris
```{r iris, echo=FALSE, results='asis'}
e2 <- new.env()
e2$params$input_df <- iris
cat(
knitr::knit_child('parameterized.Rmd', envir = e2, quiet = TRUE)
)
```
结果非常相似。但是,子报表现在将在子环境中进行评估。如果要使子报表中的变量在主报表中可用,则必须通过“<<-”进行设置。像这样,你的全局环境就不会被你可能不需要的变量所淹没。我将其用于子报告,也可以作为独立版本编织:
SeparateReport.Rmd
---
title: "Separate Report"
output: html_document
params:
fullprint: TRUE
---
```{r, eval=fullprint}
# do this only if knitting the full version is intended
...
```
```{r}
# always include this chunk
...
some_var <<- some_local_result
```
主.Rmd
---
title: "Main Report"
output: html_document
---
```{r child1}
e <- new.env()
e$params$fullprint <- FALSE
knitr::knit_child("SeparateReport.Rmd", envir = e)
print(some_var)
```
或者,您可以从主文件传递参数
主.Rmd
---
title: "Main Report"
output: html_document
params:
fullprint: FALSE
---
```{r child1}
knitr::knit_child("SeparateReport.Rmd")
print(some_var)
```
评论