두 개의 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 에서 라텍스를 빌드하기 위해 @hadleybookdown 패키지를 사용했지만 이것은이 특정 작업에 과잉 인 것처럼 보입니다. 내가 놓친 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.