在不生成HTML输出的情况下,从另一个.Rmd文件中运行RMarkdown(.rmd)。

3
我正在使我的代码更加模块化,并希望从一个总的RMarkdown文件中运行多个RMarkdown文件。我相信如果我将所有的RMarkdown文件转换为.R脚本并使用source(),那么我就可以做到这一点,但我喜欢RMarkdown的文档式特性,我可以在纯文本中描述我正在做什么。
目标是整理数据并导出可用的.sav文件。我想从run.rmd中运行clean.rmd,但我不想有任何HTML/pdf等输出。在YAML头中删除输出行并不能阻止输出。如果有一种方法可以不将所有东西都转换为.R脚本来实现这一点,我会非常感激。谢谢。

clean.rmd:执行清理的脚本

---
title: "clean"
author: "jrcalabrese"
date: "12/30/2021"
output: html_document
---

```{r}
library(tidyverse)
library(haven)
```

```{r}
data(cars)
cars <- cars %>%
  mutate(newvar = speed + dist)
```

```{r}
write_spss(cars, "~/Documents/cars_new.sav", compress = FALSE)
```

run.rmd:运行clean.rmd的脚本

---
title: "run"
author: "jrcalabrese"
date: "12/30/2021"
output: html_document
---

```{r}
rmarkdown::render("~/Documents/clean.rmd")
```

1
看起来你的代码块不在 \``{r}栅栏内,这是因为 SO 界面和代码格式化的原因吗?如果是这样,那么...插入实际的 rmarkdown 包括代码栅栏,然后高亮显示代码并按Ctrl-K`,这将缩进代码,显示预期的代码栅栏。这将呈现一个更好格式化的问题,因为我们将有一个真正的工作示例。谢谢!(如果需要,我可以编辑问题并演示我的观点,但如果您的真实文档没有栅栏,我不想更改您的问题。) - r2evans
1
或许这个链接可以提供帮助。 - akrun
1个回答

4
感谢您的帮助!这个功能可以正常工作:
---
title: "run"
author: "jrcalabrese"
date: "12/30/2021"
#output: html_document
---

```{r}
source_rmd = function(file, ...) {
  tmp_file = tempfile(fileext=".R")
  on.exit(unlink(tmp_file), add = TRUE)
  knitr::purl(file, output=tmp_file)
  source(file = tmp_file, ...)
}
```

```{r}
source_rmd("~/Documents/clean.rmd")
```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接