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


102

동일한 폴더에 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 에서 라텍스를 빌드하기 위해 @hadley 의 bookdown 패키지를 사용했지만 이것은이 특정 작업에 과잉 인 것처럼 보입니다. 내가 놓친 knitr / pandoc / linux 명령 줄을 사용하는 간단한 솔루션이 있습니까? 감사.


1
LaTeX에서 기본적으로 작성하지 않는 이유는 무엇입니까? 이를 위해 필요한 모든 도구가 LaTeX에 내장되어 있으며 뜨개질 프로세스는 어쨌든 TeX 엔진을 통해 문서를 실행합니다.
— Thomas

13
네, 저는 라텍스를 좋아하고 그것에 코드를 삽입해야하므로 좋은 계획입니다. B. 읽기 / 쓰기 라인 기능 ATM을 사용하여 R 솔루션에서 작업하기 Markdown이 사용자 친화적 인 미래라고 믿기 때문입니다! arxiv.org/abs/1402.1894 즉, 그것은 철학적 인 결정입니다. 세상에서보고 싶은 변화가 되십시오 .
— RobinLovelace 2014-09-13

2
또한 마크 다운으로 작성하면 기여에 대한 진입 장벽이 줄어 듭니다. 결국 LaTeX가 될 것이지만 당분간은 인하로 충분합니다.
— RobinLovelace 2014 년

4
hadley의 bookdown은 현재 @yihui에 의해 개발되고 있으며 많은 추가 작업과 유용한 문서가 있습니다. rstudio.github.io/bookdown
— Ben

답변:


140

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'}
# ```

작동하지만 10 장이 있습니다. 파일을 렌더링하면 5 번째 파일까지 올라갑니다. PDF 탐색 패널에서 모든 제목을 볼 수 있지만 페이지가 표시되지 않습니다.
— Suat Atan PhD

26

사람들 이 여러 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 파일을 렌더링 할 수 있습니까? 어떻게? 장의 각 요소에 대해 단일 Rmd를 갖고 싶습니다 .
— jangorecki

bookdown은 일반적으로 각 파일에 한 장이 포함되도록 권장합니다. 그러나 원하는 경우 별도의 파일로 분할 할 수 있어야합니다. 가장 쉬운 방법은 숫자 인덱스와 같은 1-1, 1-2, 1-3 등으로 각 파일을 제공하는 것입니다
— 마이클 하퍼

두 문서에 대한 코드를 보여주는 끝에 부록을 추가하려고했습니다. 어떻게 할 수 있습니까?
— Naveen Gabriel

이것은 뚜렷한 다른 질문처럼 보입니다. 다른 질문을 열고 답을
— Michael Harper

설명 : Knit는 현재 문서를 미리보기 만하고 "Build book"은 모든 것을 빌드합니다.
— Rasmus Larsen

4

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

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 패키지에 이와 같은 것을 갖는 것이 좋을 것이라고 상상해보십시오.


9
난 당신이 몇 괄호를 잊어 버렸습니다 (들여 쓰기를 제외하고,이 합리적인 해결책이라고 생각! :)
— Yihui시에에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.