Aurora blog

バイオインフォ・バイオテクノロジーにまつわる情報

R Markdownで美しいレポートを作成するためのTips

R Markdown

RではR Markdownでコードを記述することで、データ解析の結果、データ解析に使われたプログラム、解析プロセスの説明等をHTMLやPDFなどのフォーマットでレポート化することできる。他人に解析結果と解析方法を共有する場合に大変便利な機能だが、ここではR Markdownで美しいレポートを作るためのTipsをまとめようと思う。

R Markdownの基本的な記法や使い方は以下のページがわかりやすいです。

kazutan.github.io

R Markdownに関する大体の情報は基本的には以下のページに網羅されているので、こちらもご参照ください。

bookdown.org

1. テンプレートを使う

rmdformatsprettydocといったパッケージが美しいデザインのテンプレートを用意しておりオススメ。rmdformatsだけでも>5種類のレイアウトが用意されている。個人的にはrobobookが気に入っている。

github.com

基本的にはR Markdownのヘッダーのoutputに以下のような内容を加えるだけでOK。個人的によく使うオプションは以下。

  • code_folding: デフォルトでスクリプト部分を隠したい (ボタンを押すと表示される) 場合は"hide"とする
  • number_sections: セクション番号 (e.g. 1. 〇〇〇〇〇) をつける場合はtrue
  • thumbnails: 画像をサムネイルとして表示する場合はtrue (大きい画像が存在する場合におすすめ)
---
title: "DOCUMENT TITLE"
date: "`r Sys.Date()`"
author: auroratummy
output:
  rmdformats::robobook:
    code_folding: hide
    number_sections: false
    thumbnails: true
---

2. テーブル

テーブルはkableExtraDT、formattableなどのパッケージを使うことで通常よりもスマートに表示することが可能です。formattableを使うとより高度な表の可視化が簡単にできるので、こちらも使ってみても良いかもしれません。*1

data(iris)
library(kableExtra)
kbl(iris) %>% 
  kable_styling(bootstrap_options = "stripe") %>%
  scroll_box(width = "500px", height = "200px")

f:id:auroratummy:20210314215650p:plain

3. タブを使う

複数の条件で同様の解析を繰り返す場合などは、何も工夫せずにR Markdownでまとめると、たくさんの似た解析結果・コードが繰り返された冗長なレポートが作成されてしまう。このような場合は{.tabset}を利用すると以下のようにタブで複数の解析結果・コードを一箇所にまとめることができる。

{.tabset}の使い方は以下の通り。レベル1 ("#") のヘッダに{.tabset}を指定すると、レベル2 ("##") のヘッダ下に記載される内容が一つのタブとしてまとめられる。レベル2 ("##") のヘッダに{.tabset}を使うと、レベル3 ("###") の内容がまとめられる。

f:id:auroratummy:20210314220450p:plain

f:id:auroratummy:20210314220207p:plain

4. カラーパレット

以下のライブラリが便利。個人的には、Nature系雑誌で使われるカラーパレットなど、デザイン性の高いパレットを提供してくれるggsciが好み。ggsciが提供する関数はggplot2にそのまま利用できるので、この点も使いやすい。

fig = ggplot(iris) +
  geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
  theme_bw() + 
  ggsci::scale_color_nejm()
fig

f:id:auroratummy:20210314222532p:plain

5. plotlyを使う

可視化の際には基本的にplotlyを使うようにしている。特に一つの図の中に色の数がたくさんある場合は便利。ggplot2で作成した図のオブジェクトをggplotly関数に与えるだけで簡単にplotly的なインタラクティブな図にできる。

fig = ggplot(iris) +
  geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
  theme_bw() + 
  ggsci::scale_color_nejm()
library(plotly)
ggplotly(fig)

f:id:auroratummy:20210314222337p:plain