从一个Rmd运行另一个的选定块

时间:2018-10-25 22:35:36

标签: r r-markdown knitr

我已经在源Rmd文件中运行了分析,并希望仅使用源中大块的很少来编织最终Rmd文件中的干净版本。对于从Source code from Rmd file within another RmdHow to source R Markdown file like `source('myfile.r')`?中的源Rmd中提取所有块,我已经看到了一些答案。我对这些帖子感到担心,因为我不想移植单独的.R文件,这似乎是read_chunk工作的唯一方式。

我想我可以导入源Rmd了,但是现在我不确定如何在最终Rmd中从中调用特定的块。这是一个可重现的示例:

SourceCode.Rmd

---
title: "Source Code"
output:
  pdf_document:
    latex_engine: xelatex
---

```{r}
# Load libraries
library(knitr) # Create tables
library(kableExtra) # Table formatting
# Create a dataframe
df <- data.frame(x = 1:10,
                 y = 11:20,
                 z = 21:30)
```

一些解释性文字

```{r table1}
# Potentially big block of stuff I don't want to have to copy/paste
# But I want it in the final document
kable(df, booktabs=TRUE,
      caption="Big long title for whatever") %>%
  kable_styling(latex_options=c("striped","HOLD_position")) %>%
  column_spec(1, width="5cm") %>%
  column_spec(2, width="2cm") %>%
  column_spec(3, width="3cm")
```

[一些其他文字,以及我不需要的其他任何版本的纯文本。]

```{r}
save(df, file="Source.Rdata")
```

FinalDoc.Rmd

---
title: "Final Doc"
output:
  pdf_document:
    latex_engine: xelatex
---

```{r setup, include=FALSE}
# Load libraries and data
library(knitr) # Create tables
library(kableExtra) # Table formatting
opts_chunk$set(echo = FALSE)
load("Source.Rdata")
```

据我所知,这可能是加载SourceCode.Rmd的最佳方法(来自上面的第一个链接源):

```{r}
options(knitr.duplicate.label = 'allow')
source_rmd2 <- function(file, local = FALSE, ...){
  options(knitr.duplicate.label = 'allow')

  tempR <- tempfile(tmpdir = ".", fileext = ".R")
  on.exit(unlink(tempR))
  knitr::purl(file, output=tempR, quiet = TRUE)

  envir <- globalenv()
  source(tempR, local = envir, ...)
}

source_rmd2("SourceCode.Rmd")
```

这时,我不知道如何从table1调用特定块SourceCode.Rmd。我已经按照说明here尝试了以下操作,但没有成功:

```{r table1}
```

```{r}
<<table1>>
```

第一个似乎什么都不做,第二个抛出unexpected input in "<<"错误。

1 个答案:

答案 0 :(得分:0)

我编写了一个函数 source_rmd_chunks(),它通过标签名称来获取块。见gist