提问人:Andrew 提问时间:1/20/2022 最后编辑:MaëlAndrew 更新时间:1/21/2022 访问量:871
从另一个 mardown 文件访问对象
Accessing objects from another mardown file
问:
我使用 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 变量以用于第二个文档?
答:
1赞
Maël
1/20/2022
#1
在块中使用 或(等效)该选项,并将其设置为 。knitr::knit_child()
child
include = FALSE
file2.Rmd
:
---
output: word_document
---
```{r include=FALSE}
knitr::knit_child("file1.Rmd")
```
The value of y is `r y`
或者(但是,在此解决方案中,还会显示文本输出):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/......
评论