Я провел анализ в исходном файле Rmd и хотел бы связать чистую версию из окончательного файла Rmd, используя только немного фрагментов из источника. Я видел несколько ответов относительно извлечения всех фрагментов из исходного Rmd в Исходный код из файла Rmd в другом Rmd и Как получить исходный файл R Markdown, например `source ('myfile.r')`?. Я разделяю озабоченность по поводу этих сообщений в том, что я не хочу переносить отдельный файл .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
. Я безуспешно пробовал следующее в соответствии с инструкциями здесь:
```{r table1}
```
```{r}
<<table1>>
```
Первый вроде ничего не делает, а второй выдает ошибку unexpected input in "<<"
.
@TCZhang, да, если бы все, что я хотел сделать, это загрузить определенные объекты, это было бы хорошо. На самом деле я хочу ввести более сложные фрагменты (таблицы kable, графики и т. д.), Которые я уже проработал в исходном коде. Я сделал пример более сложным, чтобы продемонстрировать то, что мне нужно.
@TCZhang, ах, хорошо - после дальнейшей работы мне просто нужно сделать еще один шаг и вставить отформатированную таблицу в объект в источнике, сохранить ее, а затем вызвать этот объект в финале. Это работает - спасибо!
Я написал функцию source_rmd_chunks()
, которая генерирует чанк (ы) по имени метки. См. суть.
Я предлагаю так же, как этот ответ, вы можете сохранить результаты (рисунки, таблицы и т.д.), а также загрузить результаты и выполнить форматирование в своем отчете.