在另一个Rmd文件中运行所选代码块

5
我已经在一个源Rmd文件中运行了我的分析,并希望使用仅来自源文件的几个块从最终Rmd文件中编织出一个干净版本。我看到了一些关于从另一个Rmd文件中提取所有块的源代码如何像`souce('myfile.r')`那样引用R Markdown文件的答案。我与这些帖子分享同样的担忧,那就是我不想转移到一个单独的.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")
```

目前,我不知道如何从SourceCode.Rmd中调用特定的块table1。我已经按照这里的说明尝试了以下方法,但没有成功:

```{r table1}
```

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

第一个似乎没有任何作用,第二个会抛出一个“<<”中的意外输入错误。

1
我的建议是与这个答案相同,您可以保存结果(图表、表格等),在报告中加载结果并进行格式化。 - TC Zhang
1
@TCZhang,如果我只想加载特定的对象,那就没问题了。实际上,我想要引入更复杂的块(kable表格、图形等),这些块已经在源代码中完成了。我将示例变得更加复杂,以演示我想要的内容。 - bcarothers
@TCZhang,啊,好的 - 经过进一步的工作,我只需将格式化后的表格插入源代码中的一个对象中,保存它,然后在最终版中调用该对象。这样就可以了 - 谢谢! - bcarothers
1个回答

0
我写了一个名为source_rmd_chunks()的函数,可以通过标签名称来源代码块。请参见gist

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