从另一个 mardown 文件访问对象

Accessing objects from another mardown file

提问人:Andrew 提问时间:1/20/2022 最后编辑:MaëlAndrew 更新时间:1/21/2022 访问量:871

问:

我使用 rmarkdown 生成了一个报告。我想使用我在第一个 rmarkdown 文件中创建的变量生成第二个报告。例如,假设我的第一个文档是:

---
output: html_document
---

```{r variables, include=FALSE}
y <- 10
```

This is text.

现在我希望我的第二个文档打印“y 的值是 10”。不起作用的代码是:

---
output: word_document
---

The value of y is `r y`

如何访问在第一个文档中创建的 y 变量以用于第二个文档?

变量 R-Markdown Knitr Global Environment

评论


答:

1赞 Maël 1/20/2022 #1

在块中使用 或(等效)该选项,并将其设置为 。knitr::knit_child()childinclude = FALSE

file2.Rmd:

---
output: word_document
---

```{r include=FALSE}
knitr::knit_child("file1.Rmd")
```

The value of y is `r y`

enter image description here

或者(但是,在此解决方案中,还会显示文本输出):file2.Rmd

---
output: html_document
---

```{r, child="file1.Rmd", include=FALSE}
```

The value of y is `r y`

然后:file1.Rmd

---
output: html_document
---

```{r variables, include=FALSE}
y <- 10
```

This is text.

评论

1赞 Andrew 1/21/2022
这真是太棒了。非常感谢Yihui。我最终创建了一个 .Rda 文件来保存我的变量,然后将它们加载到第二个 Markdown 文件中。但这要容易得多!
0赞 Andrew 1/21/2022
我刚刚意识到上述解决方案对我不起作用,因为两者的输出。Rmd 文件采用不同的格式(分别为 html 和 docx)。作为解决方法,我创建了一个.Rda 文件,其中包含我从第一个 .Rmd,然后将它们加载到第二个 .Rmd 文件。它有点笨拙,但有效。如果输出的格式不同,我收集没有更简洁的解决方案吗?
0赞 Maël 1/21/2022
很高兴知道。对我来说,第一个解决方案(knit_child)适用于任何输出格式。第二种解决方案(在块中)导致第一个文件中的文本也在第二个文件中显示。child
0赞 Andrew 1/21/2022
你是对的,梅尔。当我使用此示例中的第一个解决方案时,我得到了正确的输出。在我复杂的代码中,我需要向 YAML 添加“always_allow_html:true”。现在,当我运行此代码时,我收到错误“setwd(opts_knit$get(”output.dir“)) 中的错误:字符参数预期”。消息输出指出,我可以在块中使用“quiet=TRUE”。但是,这是行不通的。
1赞 Andrew 1/21/2022
我添加了 Mat Dancho 的解决方案,它奏效了。没有更多消息。stackoverflow.com/questions/20060518/......