ggplot2関連パッケージのグラフを描きまくるGithub Pagesをつくりました

つくりました。

ページ: Home • All Your Figure Are Belong To Us
レポジトリyutannihilation/allYourFigureAreBelongToUs · GitHub

今のところこんな感じです。

f:id:yutannihilation:20150513223157p:plain:w300

動機

ggplot2を補完するパッケージが色々ありますが、それでどんなグラフが描けるのか知るためには、いちいちインストールしてexample()を 実行しないとわかりません(ドキュメントがしっかりしてるやつもありますけど)。

めんどくさいです。

みんなが同じグラフを見るために、同じコマンドをわざわざコピペして実行しないといけません。RがReproducibilityに優れているのを見せつけるのはいいですけど、 そんなreproduceしまくる必要あるんっすか??

みたいな。

私くらいの怠け者になると、その努力をショートカットしたい!と考えるようになります。そんな思いでつくったやつです。

やってること

簡単にメモっておきます。やってることは単純です。

Github Pageは、Jekyllという、Markdownを投げつけるといい感じのウェブサイトに変貌させてくれるやつを使えます。ということで、

  1. RのドキュメントのExampleのセクションだけ抜き出してRmarkdownファイルを生成
  2. Rmarkdownをknitしてmarkdownファイルを生成

という流れでできたmakrdownファイルを所定のディレクトリに入れてやればJekyllがHTMLを吐き出してくれます。

ちなみに、以前やったように、基本的にはyihuiさんのservr::jekyll()を使おうと思ってました。が、なぜか一部のページがうまくknitできなかったので (暗黙的につくchunkオプションの違いとかだと思います)仕方なく、いにしえの魔術・Makefileを書きました。

Makefile

allYourFigureAreBelongToUs/Makefile at gh-pages · yutannihilation/allYourFigureAreBelongToUs · GitHub

といってもMakefileの書き方さっぱりわかりません。↓のサイトとドキュメントを見つつ、おそるおそる書いてみたものです。

Makefileには依存関係を記述できて、うまくやればいい感じのビルドの仕組みができます。このレポジトリでは、

  • make generate: Rmarkdownファイルを生成
  • make knit: Rmarkdownをknit
  • make build: JekyllでHTMLをビルド
  • make: make knitmake buildを実行
  • make push: 生成されたページをGithubにpush

で、それぞれのコマンドは対応するlittlerスクリプトを呼ぶようになっています。 ちなみに、対象になるパッケージはpackages.txtに列挙してあります。対象を増やしたいときはここに書き加えて、make generatemakemake pushすれば大丈夫です

generateRmd.r

allYourFigureAreBelongToUs/generateRmd.r at gh-pages · yutannihilation/allYourFigureAreBelongToUs · GitHub

Rのドキュメントはtools::Rd_db()でパッケージ名を指定すると、そのパッケージが持っているドキュメントの一覧が取れます。そのドキュメントファイル(.Rd)にtools::Rd2ex()というコマンドを使うと、Examplesのセクションだけを抜き出せます。これを元にRmarkdownファイルを生成しています。

generateCategory.r

allYourFigureAreBelongToUs/generateCategory.r at gh-pages · yutannihilation/allYourFigureAreBelongToUs · GitHub

これは、Jekyll標準ではカテゴリーごとのページを生成してくれないので(プラグインとか使えばできる、けど)、自力で生成するためのページです。

一つ注意点は、Jekyllはカテゴリを勝手に小文字にしてしまうのでtolower()を噛ますなりしておかないといけない、という点です。たとえばGGallyは大文字ですが、カテゴリ名は問答無用でggallyになってしまいます。

knit.r

allYourFigureAreBelongToUs/knit.r at gh-pages · yutannihilation/allYourFigureAreBelongToUs · GitHub

これはjekyll-knitrのbuild.Rを参考にしています。

おわりに

追加してほしいパッケージがあればIssuesTwitterまでお願いします!