R Markdownで楽々レポートづくり

第6回レポート形式自由自在 ~R MarkdownからWord、PDF形式への変換~

はじめに

これまでの連載ではR MarkdownによってHTMLレポートを作成する方法を解説してきました。個人的にな経験から言えば、R Markdownによるレポート作りのオートメーション化では、

  1. HTMLレポートを使う
  2. 細かい見た目、フォーマットやスタイルを気にしすぎない

という2点を守ることが、効率化への近道だと感じています。

ところが世の中とは理不尽なもので、これが許されない状況もあるようで、例えば「そのレポートワードでくれ」とか「ブラウザでレポート見るとかアリエンアリエン。PDFでよろしく。」とか……。

R Markdownでは、HTML以外にも様々な形式のレポートを作成することができます(実際はPandocの力によるところが大きいです⁠⁠。そこで、今回と次回でHTMLレポート以外の形式のレポートを作成する方法を解説していきます。

とは言っても、レポートを作成する流れはこれまでと変わりありませんし、これまでの連載で解説してきたテクニックのほとんどは、HTML以外の形式のレポートを作成するときにも使うことができます。R Markdownでレポートのタネを作っておけば、必要に応じて、ほんの少しの変更で出力フォーマットをHTMLにもWordにもPDFにもできるということです。

ただし細かい「見た目」を気にしすぎないことが重要です。とにかく細かいことは気にしないのが重要です。

こまけぇこたぁいいんだよ!!ヾ(´∀`ヾ)

広告のコンペではないのですから、伝えるべきことが伝わればいいのだ、という心構えでいきましょう。メインのタスクである解析処理では様々な要因について気にしすぎるくらい気にしてクオリティコントロールやミスの防止策を施す必要がありますが、レポート作りに関しては細かいことは気にしないようにしましょう。

R Markdownで作成できるレポート形式

R Markdownで現在公式にサポートされている出力形式は次のとおりです。

HTML
これまで紹介してきたHTML形式のレポートです。
PDF
PDFファイルを出力します。
Word
WordのDOCX形式のファイルを出力します。
Markdown
Markdown形式のファイルを出力します。
ioslides
Google I/O 2012という形式のWebスライド(ブラウザで表示できるスライド)を出力します。
Slidy
Slidyという形式のウェブスライドを出力します。
Beamer
BeamerというLaTeXスタイルによるPDF形式のスライドを出力します。

.Rmdファイルの内容にはほとんど変更を加えずに、連載第4回で解説したYAMLフロントマターでの設定を変更することで、どのような形式のレポートを出力するか指定できます。

Word形式のレポート作成

(´°∀°`).oO(ワードでくれ)

今までどれだけの技術者がこの言葉に打ちのめされたてきたことでしょう。21世紀に入って十余年たってなお、世の中のフロントエンドの大半はワードとエクセルで動いているようです。実際、私も論文とかワードで書いてますし。自分一人で書くならR Markdown+GitHubでやりたいのですが、共著作業になるとなかなか難しいところがあります。

R MarkdownではYAMLフロントマターのoutputword_documentを指定するだけで、MS WordのDOCX形式のレポートを作成できます。以下に簡単な例を示します。

---
title: "R MarkdownでDOCX"
author: "@kohske"
output: word_document
---

マークダウン記法は対応するワードスタイルになります。

# リスト

- あいうえお
- かきくけこ

## 番号付きリスト

1. さしすせそ
1. たちつてと

---

表を出力してみましょう。

```{r}
knitr::kable(head(iris))
```

図を出力してみましょう。

```{r}
plot(iris)
```

サンプル出力(DOCXファイル)はこちらです。

いかがでしょう。見た目を気にしなければ、これまで作成した.Rmdファイルから一瞬でワード形式のレポートを作成できます。

Word形式出力のオプション

YAMLフロントマターではWord出力のオプションを少しばかり設定できます。有効なオプションはR上で?rmarkdown::word_documentとしてヘルプファイルで確認できます。例えば、図のサイズを変更して、キャプションを有効にするには次のようにYAMLフロントマターを記述します。

---
title: "R MarkdownでDOCX"
author: "@kohske"
output:
  word_document:
    fig_width: 5
    fig_height: 5
    fig_caption: true
---

一応、スタイルを参照するファイルの指定reference_docxも可能です。本気で見た目にこだわりたければ、スタイル参照を利用するのもアリといえばアリですが、オススメはしません。細かいことは気にしないようにしましょう。

文字コードの問題

Why are you using SJIS?
-- Hadley Wickham (2014)

テキスト系の話になると、Windowsでは文字コードが常に問題になります。Windowsでは、.Rmdファイルの文字コードがutf8の場合、rmarkdown::renderのオプションで`encoding='utf8'を指定しましょう。

library(rmarkdown)
render("hoge.Rmd", encoding = "utf8")

なおWhy are you using SJIS問題は本当に複雑で、個別の状況を把握しないと解決策がわからないことが多いです。もし文字化けに悩まされるような場合は、本連載コメント欄または著者ツイッター@kohske「Rワカラング」チャットルーム要メールアドレス登録で気軽に質問してください。

PDF形式のレポート作成

不思議なことにPDFファイルとして提出するだけで、レポートがフォーマルなものっぽくなるような気がしてしまいます。最終的な成果物はPDFで納入する機会も多いかもしれません。

R MarkdownではもちろんPDF形式のレポートも作成できます。ただし、LaTeX環境の導入が必須で、環境を正しく整える必要があるので、落とし穴が結構あります。面倒な方は、Word DOCX形式で出力して、DOCXファイルをPDFとして保存する、というのも一つの手です。

LaTeX環境の導入

R MarkdownでPDF形式のレポートを作成するにはLaTeX環境の導入が必要です。ここでは最低限、WindowsまたはMac OS XでR Markdownから日本語の入ったPDFレポートを作成するためのLaTeX環境を導入します。

LaTeXに関する詳細を知りたい場合には、かの有名なLaTeX2ε美文書作成入門がオススメです。ここで紹介するTeX Liveについては、奥村晴彦氏によるTEX Wikiの中のTeX Liveのページに詳しく解説があります。

Mac OS X

MacTeXをインストールします。MacTeX DownloadからMacTeX.pkgをダウンロードしてインストールすればOKですが、このファイルは2.5GBほどあって巨大です。ミラーサイトから近くのサーバを選択してダウンロードするとよいでしょう。

参考までに、TeX Wiki内のMacTeXインストールの解説です。

Windows

TexLiveをインストールします。Installing TeX Live over the Internetからinstall-tl-windows.exeをダウンロードしてインストールしましょう。基本的には「次へ」⁠次へ」でOKです。インストールにはとても時間がかかるので、ビールでも飲みながら気長に待ちましょう。

参考までに、TeX Wiki内のTex LiveのWindowsインストール解説です。

PDFレポートの作成方法

Word形式同様、R MarkdownではYAMLフロントマターのoutputpdf_documentを指定するだけで、PDF形式のレポートを作成できます。ただしデフォルトのままだと日本語が使えないので、今回はLaTeXエンジンとしてLuaLaTexを使う方法を紹介します(デフォルトはpdflatexです⁠⁠。

日本語入りのPDF作成のためのYAMLフロントマターは次のような形式です。

---
title: "R MarkdownでPDF"
author: "@kohske"
documentclass: ltjarticle
output: 
  pdf_document:
    latex_engine: lualatex
---

重要なのは、documentclass: ltjarticleとしてドキュメントクラスを明示すること、そしてlatex_engine: lualatexとしてLaTeXエンジンを指定することです。次のような.Rmdファイルを作成して、

---
title: "R MarkdownでPDF"
author: "@kohske"
documentclass: ltjarticle
output: 
  pdf_document:
    latex_engine: lualatex
---

マークダウン記法は対応するLaTeXスタイルになります。

# リスト

- あいうえお
- かきくけこ

## 番号付きリスト

1. さしすせそ
1. たちつてと

---

表を出力してみましょう。

```{r}
knitr::kable(head(iris))
```

図を出力してみましょう。

```{r}
plot(iris)
```

---

\begin{center}
\fbox{\LaTeX コマンドを直接記述してみましょう。}
\end{center}

render()でレポートを出力してみましょう。

library(rmarkdown)
render("pdf.Rmd")
# WindowsでUTF8の.Rmdの場合
# render("pdf.Rmd", encoding = "utf8")

とすれば、pdf.pdfというPDFレポートが出力されます。サンプル出力(PDFファイル)はこちらです。

上の例のように、R Markdown本文中にLaTeX記法の文書を直接記述することもできます。

Windowsユーザ向けの情報

特にWindowsの場合、pandocのバージョン、環境変数などの組み合わせによりエラーが起こる場合があります。 手元の環境では

  • Windows 7
  • Pandoc version 1.12.4.2(少し古いもの)
  • rmarkdown version 0.7(最新)
  • 環境変数TEMPTMPをロングファイルネームで指定するTHIS_I~1.HTMとかではないフルパス表記)

でPDFレポートの作成に成功しています。上記の設定を行ってもPDF出力に失敗する場合は、再び本連載コメント欄または著者ツイッター@kohske「Rワカラング」チャットルーム要メールアドレス登録まで状況を知らせてもらえれば、個別に対応できるかもしれません。お気軽にどうぞ。

PDF形式出力のオプション

Word形式と同じように、YAMLフロントマターではオプションを少しばかり設定できます。有効なオプションはR上で?rmarkdown::pdf_documentとしてヘルプファイルで確認できます。次の例では目次を有効にして、見出しに番号をつけています。

---
title: "R MarkdownでPDF"
author: "@kohske"
documentclass: ltjarticle
output: 
  pdf_document:
    latex_engine: lualatex
    toc: true
    number_sections: true
---

また、ヘッダや本文前後に外部TeXファイルを挿入することもできます。独自のプリアンブルの指定や文書の先頭・末尾のテンプレート化に便利です。in_headerはヘッダに、before_bodyは文書先頭に、after_bodyは文書末尾に差し込まれます(なお同様の設定によりHTMLレポートでも外部HTMLファイルを差し込むことができます⁠⁠。

---
title: "hoge"
output:
  pdf_document:
    includes:
      in_header: header.tex
      before_body: doc_prefix.tex
      after_body: doc_suffix.tex
---

外部TeXファイルを準備するまでもない場合は、YAMLフロントマターのheader-includesに直接プリアンブルを記述できます。

---
title: "hoge"
header-includes:
   - \usepackage{bbm}
output:
    pdf_document
---

PDFレポートの場合、LaTeXを勉強して本気を出せば(見た目が)出版品質のレポートを作成することも可能です。ですが、日々のレポートのなどの場合、そこまで高品質な見た目のレポートが求められることはないでしょう。そこに本気をだすのではなく、解析処理のほうに本気を出すようにしましょう。

まとめ

今回はR MarkdownでWord形式とPDF形式のレポートを作成する方法を紹介しました。PDF形式の場合は、LaTeX環境の導入など、やや難易度が高いかもしれません。冒頭でも書いたように、基本はHTMLレポートを採用するのがよいでしょう。上司やクライアントや先生からWord形式やPDF形式を求められたら、まずは

HTMLいいっすよ〜 (´ー`)y─┛~~

と粘り強く反応しましょう。それでもどうしてもダメなら、今回の記事を参考にWord形式やPDF形式のレポートを作成してみてください。

5月に始まったこの連載も、もう第6回です。毎回、最後に一言何か書こうと思っているのですが、そろそろネタが尽きてきました。残すところあと2回くらいの予定ですので、どうぞ最後までお付き合い頂ければ幸いです。

また、今回も入稿したオリジナルの原稿である、自動変換処理などを行う前のR Markdownファイルやサンプルなどをまとめて公開しておきます。

次回は

R Markdownではプレゼンに使うようなスライドも作成できます。次回はR MarkdownでWebスライドを作成する方法を紹介します。.Rmdから作成したスライドをWebブラウザ上でサクッとプレゼンすれば、好感度150%アップ間違いなしです。

おすすめ記事

記事・ニュース一覧