我已经在源Rmd文件中运行了分析,并希望仅使用源中大块的很少来编织最终Rmd文件中的干净版本。对于从Source code from Rmd file within another Rmd和How 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 "<<"
错误。