[r] 두 개의 RMarkdown (.Rmd) 파일을 단일 출력으로 결합하는 방법은 무엇입니까?

동일한 폴더에 chapter1.Rmd 및 chapter2.Rmd라는 두 개의 파일이 있으며 다음 내용이 있습니다.

챕터 1. Rmd

---
title: "Chapter 1"
output: pdf_document
---

## This is chapter 1. {#Chapter1}

Next up: [chapter 2](#Chapter2)

Chapter2. Rmd

---
title: "Chapter 2"
output: pdf_document
---

## This is chapter 2. {#Chapter2}

Previously: [chapter 1](#Chapter1)

단일 pdf 출력으로 결합되도록 어떻게 짜낼 수 있습니까?

물론 render(input = "chapter1.Rmd", output_format = "pdf_document")완벽하게 작동하지만 render(input = "chapter1.Rmd", input = "chapter2.Rmd", output_format = "pdf_document")그렇지 않습니다.

왜 이렇게해야합니까? 거대한 문서 를 논리 파일로 나누는 것 .

.Rmd 에서 라텍스를 빌드하기 위해 @hadleybookdown 패키지를 사용했지만 이것은이 특정 작업에 과잉 인 것처럼 보입니다. 내가 놓친 knitr / pandoc / linux 명령 줄을 사용하는 간단한 솔루션이 있습니까? 감사.



답변

2018 년 8 월 업데이트 : 이 답변은 Rmarkdown 기반 책을 작성하는보다 강력한 접근 방식 인 bookdown 의 출현 이전 에 작성되었습니다. @ Mikey-Harper의 답변 에서 최소한의 bookdown 예제를 확인하십시오 !

큰 보고서를 별도의 Rmd로 나누고 싶을 때 일반적으로 부모 Rmd를 만들고 장을 자식으로 포함합니다. 이 접근 방식은 새로운 사용자가 이해하기 쉬우 며 목차 (toc)를 포함하면 장 사이를 쉽게 이동할 수 있습니다.

report.Rmd

---
title: My Report
output:
  pdf_document:
    toc: yes
---

```{r child = 'chapter1.Rmd'}
```

```{r child = 'chapter2.Rmd'}
```

챕터 1. Rmd

# Chapter 1

This is chapter 1.

```{r}
1
```

Chapter2. Rmd

# Chapter 2

This is chapter 2.

```{r}
2
```

짓다

rmarkdown::render('report.Rmd')

다음을 생성합니다.
내 보고서

하위 문서에 대한 청크를 빠르게 생성하려면 다음을 수행하십시오.

rmd <- list.files(pattern = '*.Rmd', recursive = T)
chunks <- paste0("```{r child = '", rmd, "'}\n```\n")
cat(chunks, sep = '\n')
# ```{r child = 'chapter1.Rmd'}
# ```
#
# ```{r child = 'chapter2.Rmd'}
# ```


답변

사람들 이 여러 R Markdown 파일에서 보고서를 작성 하기 위해 bookdown 패키지를 사용하는 것이 좋습니다 . 긴 문서에 매우 유용한 상호 참조와 같은 유용한 기능을 많이 추가합니다.

@Eric 의 예제를 적용하여 여기에 북 다운 설정 의 최소 ​​예제가 있습니다. 주요 세부 사항은 기본 파일이 호출 index.Rmd되어야하며 추가 YAML 행을 포함해야한다는 것입니다 site: bookdown::bookdown_site.

index.Rmd

---
title: "A Minimal bookdown document"
site: bookdown::bookdown_site
output:
  bookdown::pdf_document2:
    toc: yes
---

01-intro.Rmd :

# Chapter 1

This is chapter 1.

```{r}
1
```

02-intro.Rmd :

# Chapter 2

This is chapter 2.

```{r}
2
```

Knit 경우 index.Rmd bookdown 은 동일한 디렉토리의 모든 파일을 알파벳 순서로 병합합니다 (이 동작은 추가 _bookdown.yml파일을 사용하여 변경할 수 있음 ).

여기에 이미지 설명 입력

이 기본 설정으로 편안하게되면, 추가 구성 파일, 즉 사용하여 bookdown 문서 및 출력 형식을 사용자 정의 할 수 간단 _bookdown.yml하고_output.yml

추가 읽기


답변

이것은 나를 위해 일했습니다.

Rmd_bind <-
    function(dir = ".",
    book_header = readLines(textConnection("---\ntitle: 'Title'\n---")))
{
    old <- setwd(dir)
    if(length(grep("book.Rmd", list.files())) > 0){
    warning("book.Rmd already exists")
    }
    write(book_header, file = "book.Rmd", )
    cfiles <- list.files(pattern = "*.Rmd", )
    ttext <- NULL
    for(i in 1:length(cfiles)){
    text <- readLines(cfiles[i])
    hspan <- grep("---", text)
    text <- text[-c(hspan[1]:hspan[2])]
    write(text, sep = "\n", file = "book.Rmd", append = T)
    }
    render("book.Rmd", output_format = "pdf_document")
    setwd(old)
    }

더 나은 솔루션이 있고 rmarkdown 또는 knitr 패키지에 이와 같은 것을 갖는 것이 좋을 것이라고 상상해보십시오.


답변