Rとウェブの融合(4)ーrmarkdownー

動的ドキュメント生成

Rで行った統計解析や可視化を「使えるもの」にするためには、解析結果や可視化グラフをレポートとしてまとめる必要があります。 多くの場合、ワードファイルを作成して、その中に解析結果(数値・表)や可視化グラフをコピーペーストするという作業が行われていることでしょう。 ところがこの作業には次のような問題があります。

  1. データの追加や変更があった時に、レポート作成(結果のコピペ)をやり直す必要があり、無駄な時間がかかる。
  2. 手作業でコピペする必要があるので、ミスが起きやすい。
  3. レポートを見ても、実際に行った解析処理の内容がわからない。

このような状況では、「動的ドキュメント生成」という手法が有効です。 動的ドキュメント生成とは、レポートのドキュメント部分とRのコードが混在したファイルを作成して、これを処理することでレポートを自動的に生成するというものです。 動的ドキュメント生成を採用する主なメリット以下の通りです。字面だけでは伝わらないかもしれませんが、実践してみればその便利さに驚かされることでしょう。

  1. データの追加や変更があっても、レポート生成は自動処理なので無駄な時間がかからない。
  2. 手作業でコピペする必要がないので、ミスが起きづらい。
  3. 元のファイルの中にドキュメントとコードが記述されているので、解析処理の内容が容易に把握できる。

Rで動的ドキュメント生成を行うための主要なツールとしてSweaveknitr、そしてrmarkdownがあります。 knitrについては本誌2013年10月号で解説されています。また拙著『シリーズUseful R ドキュメント・プレゼンテーション生成』(共立出版)でも詳しく解説していますが、 その後もドキュメント生成ツールは大きく発展しています。 今回は最新の、そして著者の意見では最も便利なツールであるrmarkdownパッケージを利用したドキュメント生成について紹介します。

rmarkdownパッケージ

rmarkdownパッケージはRStudio開発チームにより開発されています。 最新版のRStudioではドキュメント生成のためにrmarkdownを採用しています。 今回の記事ではrmarkdownバージョン0.3.3、及びRStudioバージョン0.98.1028を用いています。

rmarkdownパッケージは単独でもインストールできますが、別途インストールが必要なツールなどがあり面倒です。 rmarkdownパッケージや必要なツールが付属している最新版のRStudioのインストールをお勧めします。 http://www.rstudio.com/products/rstudio/download/ にアクセスして自分の環境に合ったインストーラをダウンロードして下さい。

また、最新版のRStudioの支援機能を使うことで動的ドキュメント生成をGUIを使って手軽に実践できます。 今回の記事ではRStudioを使ったドキュメント生成について紹介します。

rmarkdownパッケージでは、HTMLレポートの他、PDFレポート、Microsoft WordのDOCX形式のレポート、ウェブスライドなど、様々なフォーマットに出力できます。 PDFレポートの作成にはLaTeX環境の導入が必要です(RStudioを利用する場合でも、LaTeXは別途導入する必要があります)。 LaTeX環境の導入についてはTeX Wiki (http://oku.edu.mie-u.ac.jp/~okumura/texwiki/) などを参考にして下さい。

RStudioを使ったレポート作成例

ここでは簡単なレポート作成例を紹介します。手順は以下の通りです。

  1. RStudioを起動します。
  2. [File]-[New File]メニュー(またはウィンドウ左上の新規ファイルアイコン)-[R Markdown]を選択します。
  3. New R Markdownダイアログ(図1)でDocumentタブのHTMLを選択して、タイトルと著者名を入力して[OK]ボタンをクリックします。
  4. テンプレートのRマークダウンファイルが開くので内容を編集して保存します。
  5. ウィンドウ上部の[Knit HTML]ボタンをクリックします。
  6. レポート表示ウィンドウにレポートの内容が表示されます。

図1: New R Markdownダイアログ

今回は次のようなRマークダウンファイルを作成しました。

---
title: "ESTRELA 11月号"
author: '@kohske'
date: "2014年9月1日"
output: html_document
---

R Markdownを使うと簡単にレポートが作成できます。

```{r, results='asis'}
knitr::kable(head(mtcars, 3))
```

図も埋め込むことができます。

```{r}
plot(cars)
```

次のようなレポートが生成されます。

図2: 生成されたレポート

図1のダイアログではDocumentタブの中で出力フォーマットを選択できます。PDFを選択した場合にはLaTeX環境が必要です。Wordを選択するとDOCX形式のレポートが作成できます。 これらの設定はRマークダウンファイルの先頭にメタ情報として記述されるので、後から変更することもできます。 GUIメニューから設定を変更するには、[Knit HTML]ボタンの右にある三角形をクリックして[Knit Word]を選択します(図3)。図4のようなDOCXファイルが作成されます。

図2: フォーマットの変更

図2: 生成されたDOCX形式のレポート

Document以外の出力フォーマットも選択できます。Presentationはプレゼンで使うためのウェブスライドやPDFスライドを作成します。作成の手順はDocumentの場合と同じです。 ShinyはShinyウェブアプリケーションを埋め込んだドキュメントやプレゼンテーションを作成します。レポートの中でグラフなどをインタラクティブに操作することができます。

なおRStudioを使ったレポートの作成については本誌2013年10月号や『シリーズUseful R ドキュメント・プレゼンテーション生成』も参考にして下さい。但しこれらの記事では少し古い情報が掲載されています。

Rマークダウンファイルの記述方法

Rマークダウンファイルの中にはドキュメントとコードを記述します。 レポートを生成する際にはコード部分がRにより評価されて、レポートの中に結果が埋め込まれます。

ドキュメントとコードの記述方法について、誌面の都合上ここではごく簡単に説明します。 マークダウン記法やチャンクオプションなどの詳細については『シリーズUseful R ドキュメント・プレゼンテーション生成』で詳しく解説しています。

ドキュメントの記述

ドキュメントはマークダウン記法を用いて記述します。 マークダウン記法とは構造化された文書を手軽に記述するための書式です。主な書式は次の通りです。

なお、RStudioのエディタ上部にある?ボタンをクリックするとマークダウン記法のリファレンス(英語)を表示できます。

コードの記述

Rのコードは```{r [options]}という行から```という行の間に記述します。これをコードチャンクと呼びます。 チャンク開始行ではそのコードチャンクの出力、プロット画像の処理、評価の方法など、様々なオプションを指定できます。例えば、 ```{r echo=FALSE}とすると、コードチャンクのコードは表示しないで結果のみを出力します。

YAMLヘッダ

rmarkdownパッケージではドキュメントのメタ情報を記述するためのYAMLヘッダが導入されました。 サンプルの先頭の---で囲まれた部分がYAMLヘッダです。 RStudioでRマークダウンファイルを作成するとYAMLヘッダは自動的に追加されますが、この部分を編集することでタイトル、著者、作成日などに加えて、ドキュメント生成に関する設定を行うことができます。 中身はYAML記法で記述します。行頭のインデントは必須です。

次の例ではHTML出力で、目次を作成、見出しに連番を追加しています。

---
title: "HTML出力"
output:
  html_document:
    toc: true
    number_sections: true
---

次の例ではWord出力で図の高さを3インチに指定しています。

---
title: "Word出力"
output:
  word_document:
    fig_height = 3
---

なお、有効なオプションは

> library(rmarkdown)
> ?html_document
> ?word_document

などとして、関数の引数を確認して下さい。

RStudioとrmarkdownパッケージを用いた動的ドキュメント生成は手軽に導入できて非常に便利な手法です。 まずは今回のサンプルに従って試してみてください。一度使ってみるとと手放せなくなること間違いありません。 今回は誌面の都合でほんの導入部分のみ紹介しています。より詳細な使い方は、http://kohske.github.io/R/rmarkdown/ などを参考にして下さい。

次回はslidifyパッケージやRStudioのR Presentationを用いたウェブスライドの作成について紹介します。