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

第4回 レポつく自由自在 ~R Markdownにまつわるエトセトラ~

この記事を読むのに必要な時間:およそ 4.5 分

はじめに

早いもので本連載ももう4回目です。マラソンに例えると,折り返し地点を目前に,先頭を走るロサ・モタの後ろ姿をおぼろげながらも視界に捉えてきたというところでしょうか。

前回はコードチャンクごとの処理を効率化するということで,チャンクオプションを中心に解説しました。今回はR Markdownにまつわるエトセトラとして,レポートづくりをさらに加速するためのテクニックを紹介します。ただし全てのエトセトラをフォローできるわけではありませんので,疑問質問などはコメント欄またはツイッター@kohskeまでお願いします。

インラインコード

前回までに説明するつもりですっかり忘れていたのですが,文章中に簡単な計算結果を埋め込みたいときなどは,コードチャンクはちょっと大げさです。R Markdownでは,Rのコードをコードチャンク以外にインラインコードとしても記述することができます。書式は次のとおりです。

テキスト・・・`r Rのコード` テキスト・・・

バッククォートに続けて,r半角スペース,その後にRのコードを記述して,バッククォートを閉じます。Rのコード部分は実行結果に置き換えられます。

irisの1列目と2列目の相関は`r cor(iris[[1]], iris[[2]])`です。

この部分は,レポートでは

irisの1列目と2列目の相関は-0.1175698です。

というように出力されます。もちろんコード部分では別の(ただしインラインコードよりも前にある)コードチャンクで作成したオブジェクトを参照することもできます。

YAMLフロントマターによるメタ情報の設定

R Markdownの先頭にはYAMLフロントマターと呼ばれるブロックを記述します(必須ではありませんが,記述したほうが良いでしょう)⁠ここではタイトル,作成者,作成日などのレポートのメタ情報の設定や,R Markdownからレポートを作成する際の変換に関する設定を行います。

基本的な書式は次の通りです。インデントされた行は子要素として処理されますが,YAMLではインデントにタブが使えません。必ず半角スペースによりインデントする必要があります。

---
title: "R Markdownで楽々レポートづくり<br/>第4回 レポつく自由自在〜R Markdownにまつわるエトセトラ〜"
author: '@kohske'
date: "`r format(Sys.time(), '%Y/%m/%d')`"
output:
  html_document:
    self_contained: true
    toc: true
---

タイトルなどのメタ情報が,実際のレポートの中でどのように使われるかは,レポートのフォーマットにより異なります。通常は,titleauthordateくらいを指定しておけばよいでしょう。また,YAMLフロントマターの内容もRにより処理されるので,上記のdateの例のようにRのコードを記述しておくこともできます。

レポート作成の設定は,output:の子要素として出力フォーマットを指定し,さらにその子要素として出力フォーマット用のオプションを指定します。指定できるフォーマットにはhtml_documentpdf_documentword_documentbeamer_presentationioslides_presentationslidy_presentationなどがあります。指定できるオプションは,Rコンソール上でlibrary(rmarkdown)とした後に,?html_documentなどとしてヘルプファイルを開けば参照できます。

上記の例では,フォーマットをHTMLとして,self_containedを有効にして,画像等を外部ファイルではなくHTML内部に埋め込むようにしています。またtocを有効にして目次を追加しています。HTML以外のフォーマットのレポートを作成するコツや,利用できるオプションやについては,次回以降で紹介します。

日本語HTMLレポートでハマる罠として,目次を有効にした場合,ヘッダ要素###の内容が日本語文字のみだと目次をクリックしても対応する要素にジャンプできないということがあります。ちょっと込み入った話をすると(興味ない人は無視してください)⁠pandocにはascii_identifiersというパースオプションがあり,これが有効にされていると識別子に非ascii文字を使えなくなります。pandocではヘッダ要素の文字列からHTMLのアンカー用の識別子を自動生成しますが,ここが非asciiだと識別子が生成されないというわけです。R Markdownではこのパースオプションがデフォルトで有効になっているので,この問題を回避するには,フロントマターで

output:
  html_document:
    toc: true
    pandoc_args: [
      "--from", "markdown+autolink_bare_uris+tex_math_single_backslash-implicit_figures"
      ]

とします。

著者プロフィール

高橋康介(たかはしこうすけ)

東京大学先端科学技術研究センター特任助教。専門は認知科学,認知心理学,認知神経科学。どうやったら人が幸せな気持ちになれるのか研究中。著書に「R言語上級ハンドブック」(分担執筆・C&R研究所),「ドキュメント・プレゼンテーション生成」(共立出版)。趣味はラテ・アート。

コメント

コメントの記入