はじめに
これまでの連載ではR MarkdownによってHTMLレポートを作成する方法を解説してきました。個人的にな経験から言えば、R Markdownによるレポート作りのオートメーション化では、
- HTMLレポートを使う
- 細かい見た目、フォーマットやスタイルを気にしすぎない
という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フロントマターのoutput
にword_document
を指定するだけで、MS WordのDOCX形式のレポートを作成できます。以下に簡単な例を示します。
サンプル出力(DOCXファイル)はこちらです。
いかがでしょう。見た目を気にしなければ、これまで作成した.Rmdファイルから一瞬でワード形式のレポートを作成できます。
Word形式出力のオプション
YAMLフロントマターではWord出力のオプションを少しばかり設定できます。有効なオプションはR上で?rmarkdown::word_document
としてヘルプファイルで確認できます。例えば、図のサイズを変更して、キャプションを有効にするには次のようにYAMLフロントマターを記述します。
一応、スタイルを参照するファイルの指定(reference_docx
)も可能です。本気で見た目にこだわりたければ、スタイル参照を利用するのもアリといえばアリですが、オススメはしません。細かいことは気にしないようにしましょう。
文字コードの問題
Why are you using SJIS?
-- Hadley Wickham (2014)
テキスト系の話になると、Windowsでは文字コードが常に問題になります。Windowsでは、.Rmdファイルの文字コードがutf8の場合、rmarkdown::render
のオプションで`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フロントマターのoutput
にpdf_document
を指定するだけで、PDF形式のレポートを作成できます。ただしデフォルトのままだと日本語が使えないので、今回はLaTeXエンジンとしてLuaLaTexを使う方法を紹介します(デフォルトはpdflatexです)。
日本語入りのPDF作成のためのYAMLフロントマターは次のような形式です。
重要なのは、documentclass: ltjarticle
としてドキュメントクラスを明示すること、そしてlatex_engine: lualatex
としてLaTeXエンジンを指定することです。次のような.Rmdファイルを作成して、
render()
でレポートを出力してみましょう。
とすれば、pdf.pdfというPDFレポートが出力されます。サンプル出力(PDFファイル)はこちらです。
上の例のように、R Markdown本文中にLaTeX記法の文書を直接記述することもできます。
Windowsユーザ向けの情報
特にWindowsの場合、pandocのバージョン、環境変数などの組み合わせによりエラーが起こる場合があります。 手元の環境では
- Windows 7
- Pandoc version 1.12.4.2(少し古いもの)
- rmarkdown version 0.7(最新)
- 環境変数
TEMP
とTMP
をロングファイルネームで指定する(THIS_I~1.HTM
とかではないフルパス表記)
でPDFレポートの作成に成功しています。上記の設定を行ってもPDF出力に失敗する場合は、再び本連載コメント欄または著者ツイッター@kohske、「Rワカラング」やチャットルーム(要メールアドレス登録)まで状況を知らせてもらえれば、個別に対応できるかもしれません。お気軽にどうぞ。
PDF形式出力のオプション
Word形式と同じように、YAMLフロントマターではオプションを少しばかり設定できます。有効なオプションはR上で?rmarkdown::pdf_document
としてヘルプファイルで確認できます。次の例では目次を有効にして、見出しに番号をつけています。
また、ヘッダや本文前後に外部TeXファイルを挿入することもできます。独自のプリアンブルの指定や文書の先頭・末尾のテンプレート化に便利です。in_header
はヘッダに、before_body
は文書先頭に、after_body
は文書末尾に差し込まれます(なお同様の設定によりHTMLレポートでも外部HTMLファイルを差し込むことができます)。
外部TeXファイルを準備するまでもない場合は、YAMLフロントマターのheader-includes
に直接プリアンブルを記述できます。
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%アップ間違いなしです。