1. ホーム
  2. r

[解決済み] 2つのRMarkdown (.Rmd)ファイルを1つの出力に結合する方法は?

2022-09-02 05:17:41

質問

同じフォルダにchapter1.Rmdとchapter2.Rmdという2つのファイルがあり、内容は次のようになっています。

chapter1.Rmd

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

## This is chapter 1. {#Chapter1}

Next up: [chapter 2](#Chapter2)

章2.Rmd

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

## This is chapter 2. {#Chapter2}

Previously: [chapter 1](#Chapter1)

どのようにこれらを編んで、1つのpdf出力にまとめることができるのでしょうか?

もちろんです。 render(input = "chapter1.Rmd", output_format = "pdf_document") は完全に機能しますが render(input = "chapter1.Rmd", input = "chapter2.Rmd", output_format = "pdf_document") は動作しません。

なぜこんなことをしたいのか?を分割するために 巨大文書 を論理的なファイルに分割するためです。

私は @hadley 'の ブックダウン パッケージを使って .Rmd から latex をビルドしましたが、この特定のタスクには過剰なように思われます。knitr/pandoc/linuxのコマンドラインを使った簡単な解決策はないのでしょうか?ありがとうございます。

どのように解決するのですか?

<ブロッククオート

2018年8月更新です。 この回答は、登場以前に書かれた ブックダウン これはRmarkdownベースの本を書くための、より強力なアプローチです。最小限の ブックダウン の例をご覧ください。 答え !

大きなレポートを個別の 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
```

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