2つのRMarkdown(.Rmd)ファイルを1つの出力に組み合わせる方法は?


100

同じフォルダーに2つのファイル(chapter1.Rmdとchapter2.Rmd)があり、次の内容が含まれています。

Chapter1.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")しません。

なぜこれをしたいのですか?別れるために、巨大な文書を論理ファイルに。

私は@hadleyのbookdownパッケージを使用して.Rmd からlatexをビルドしましたが、これはこの特定のタスクにはやり過ぎのようです。knitr / pandoc / linuxコマンドラインを使用した簡単な解決策はありますか?ありがとう。


1
LaTeXでネイティブに書いてみませんか?このために必要なすべてのツールがLaTeXに組み込まれており、編成プロセスはとにかくTeXエンジンを介してドキュメントを実行しているようです。
トーマス

13
はい、私はラテックスが好きで、コードを埋め込む必要があるので、それは良い計画です。arxiv.org/abs/1402.1894つまり、それは哲学的な決定です。世界で見たい変化です。
RobinLovelace

2
また、値下げとして書くことは、貢献へのエントリーへの障壁を減らします。最終的にはLaTeXになりますが、とりあえずマークダウンで十分です。
RobinLovelace

4
hadleyのブックダウンは現在@yihuiによって開発されており、さらに多くの作業と有用なドキュメントが作成されています。rstudio.github.io
Ben

回答:


138

2018年8月の更新:この回答は、Rmarkdownベースの本を書くためのより強力なアプローチであるbookdownが登場する前に書かれました。@ Mikey-Harperの回答で最小限のブックダウンの例をチェックしてください!

大きなレポートを個別のRmdに分割する場合、通常は親Rmdを作成し、チャプターを子として含めます。このアプローチは、新しいユーザーが理解しやすく、目次(toc)を含めると、章間を簡単に移動できます。

report.Rmd

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

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

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

Chapter1.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 2015

26

複数のR マークダウンファイルからレポートを作成するには、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
```

index.Rmd ブックニットが同じディレクトリにあるすべてのファイルをアルファベット順にマージする場合(この動作は、追加の_bookdown.ymlファイルを使用して変更できます)。

ここに画像の説明を入力してください

あなたは、この基本的な設定に慣れてもらうと、追加の設定ファイルを使用してbookdown文書フォーマットと出力フォーマットをカスタマイズするのは簡単IEである_bookdown.yml_output.yml

参考文献


ネストされたRmdファイルをこの方法でレンダリングすることは可能ですか?どうやって?章の各要素に単一のRmdを設定したいと思います。
jangorecki

ブックダウンでは通常、各ファイルに1つの章を含めることをお勧めします。ただし、必要に応じて、個別のファイルに分割することもできます。最も簡単な方法は、各ファイルに1-1、1-2、1-3などの数値インデックスを提供することです
Michael Harper

両方のドキュメントのコードを示す付録を最後に追加しようとしていました。どうすれば達成できますか?
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 Xie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.