「ドキュメント・プレゼンテーション生成」という本を書きました


共立出版のシリーズ Useful R の中の「ドキュメント・プレゼンテーション生成」という本を執筆しました。

本書は統計解析手法の解説本ではありません

Rを使った解析・分析の結果について

  • 簡単に
  • 素早く
  • 間違いがないように
  • 再現可能な方法で

レポート(ドキュメント・プレゼンテーション)を作成する方法を解説しています。

ですので、Rを使って解析・分析を行って、

  • わかりやすい形で結果を眺めたい
  • 結果をまとめて誰かに見せたい
  • いつか自分で見直すかもしれない

といった人が対象です。要するに、Rを実務で使う全ての人が対象、ということだと思います。

再現可能性

本書の冒頭で大学院生の美咲さんのエピソードを紹介していますが(架空の話です)、「再現可能性」の重要性についての認識は日に日に高まっています。

実験科学の分野では再現可能性とは、「同じ実験条件なら同じ結果が得られる」ということを意味します。ですので、実験論文には実験条件がこれでもかというくらい細かく記述してあります

(余談ですが、著者の専門分野では人間を被験者として実験を行います。実験論文には、この時に被験者に支払った謝礼の額まで記載してあるケースが多いです。金額の多寡によるモチベーションの影響を考慮してのことだと思われます。10数年前初めて論文を読んだときは驚きました)

Rを使ったデータ解析・分析〜レポート作成の流れでの再現可能性とは、

  • レポートに載せられている結果(数値やグラフ)などをもう一度再現できる。
  • 自分以外の人でもその結果を再現できる。
  • レポートに間違いが見つかった時に、間違いの原因を突き止めることができる。

ということを意味します(本書第1章より)。

これ、できて当たり前のようで、実際にやろうとすると難しいです。

  • え、ちょっ、このグラフどっから出てきたの!!
  • この手法って初期値の影響大きいんだけど、この結果出た時の初期値って?
  • 元データどこだよ!!

とか、あるあるです。そんな現状を打破すべく、本書では「動的レポート生成」という手法を紹介しています。

動的レポート生成

knitrとかSweaveを使いましょう、という話なんですが、一言で言えば「ドキュメントと解析コードを一緒に記述して、あとは自動的にレポートを作成する」という方法です。採用するメリットは、

  • レポート作成に要する時間が大幅に減る
  • (主にコピペによる)ミスが大幅に減る
  • レポートに間違いがあった時に、その原因を簡単に突き止められる
  • 解析コードの意味が一目でわかるようになる

といった点が挙げられます。理由に関しては本書第1章に書いてあります。

再現性が必要な場合は動的レポート生成を導入しましょう(マジで)。

本書の内容

本書の構成は次のようになっています。詳細な目次は公式サイトアマゾンでどうぞ。

  1. 動的レポート生成の事始め
  2. knitrの基本的な使い方
  3. knitrでレポートのカスタマイズ
  4. knitr以外の動的レポート生成ツール
  5. ウェブを使ったプレゼンテーション
  6. レポート生成に使えるツールの紹介
  7. Shiny!!
  8. Rstudioをつかった動的レポート生成

付録1. 日本語処理、日本語フォントを使う方法など
付録2. knitrオプション一覧
付録3. markdown記法

簡単に補足すると、1〜4章までは動的レポート生成の実践的な話です。チュートリアルをたくさん入れておいたので、真似して始めるとこから試してもらうといいと思います。

5章は、slidifyとかrChartsとかgoogleVisとか、ウェブをつかったレポートの話です。例えば次のようなものです。

rChartsのサンプル
- Polychart
- morris.js
- NVD3
- Highcharts

こういうものをR上で簡単に作ってしまおう、という話です。

6章では、ムービーの作成(animationパッケージ)、表の作成(tablesパッケージ)、3次元プロットの作成(rglパッケージ)について紹介しています。個人的には余興的な扱いです。

7章のshinyは、ウェブアプリケーションをR上で簡単に作ってしまえますよ、という話です。超パワフルなプレゼンテーションツールです。何が出来るか、を一言で説明するのは難しいので、shinyデモギャラリーで遊んでみてください。

8章はRStudioの話ですが、RStudioが日々進化しているので、最新の情報は解説ページからどうぞ。

あと、特にwindowsでよく聞くんですが、日本語フォントが使えない〜、とか、日本語が〜、とか、そういう場合用の対処法を付録Aに入れておきました。但し完全に網羅してるわけではないと思うので、サポートサイトのコメントとかで質問してもらえれば、可能な範囲で答えます。動的レポート生成に関わるツール群の日本語対応は徐々に進めています。その情報もサポートサイトで適宜お知らせする予定です。

さいごに

本書に読んでくれた皆様が、レポート作成の関わる不毛で非生産的な作業から開放され、皆様の睡眠時間が少しでも増えれば著者冥利に尽きます。

Enjoy!!

Debug in R #6: Debug in S4/R5 classes


S4/R5クラスのデバッグ

Rにビルトインされたオブジェクト指向的なフレームワークを提供する仕組みとして、S3以外に、S4とR5がある。大規模なパッケージを作るときとか、mutableな機能を実装するときにはとても役立つ。
あとR5はR5 reference classというように、参照渡しのセマンティックで実装されてるので、関数型言語らしさはなくなっちゃうんだけど、馬鹿でかいデータとかある時にはコピーが発生しないので、効率がよくなるはず。

ここらへんを使ってる人は、特に説明もいらないと思うので、デバッグのやり方は以下の実例で。ポイントだけ箇条書きします。

  • S4の場合、tracesignatureを渡す。
  • S4の場合、特定のインスタンスのメソッドだけデバッグする、というのは難しい(相当回りくどいことしないと無理だと思う)。
  • R5の場合、生成されたインスタンスのメソッドに対して普通の関数のようにdebugなり、traceなりで、デバッグできる。
  • R5の場合、S4とは逆に、あるクラスのメソッドを、どのインスタンスで呼ばれた場合にでもデバッグする、というのは難しい(試したら出来たけどbad hackっぽい)。

なお、既存のパッケージとかじゃなくて、開発中で自分でソースコードをいじれるなら、直接broweserを仕込むのが一番早いとおもう。

Continue reading

Debug in R #5: Debug in S3 methods


S3メソッドのデバッグ

S3ジェネリック

S3ジェネリックは、オブジェクト指向っぽい簡単なメソッドディスパッチの機能を提供する。詳細は、?S3Methodsとか、?methodsとかで。

普段使ってる関数の多くが、S3メソッドとして実装されてる。例えば、plot:

実行例

> methods(plot) # methodsで、その名前のS3メソッドの一覧を表示
 [1] plot.acf*           plot.data.frame*    plot.decomposed.ts* plot.default        plot.dendrogram*    plot.density       
 [7] plot.ecdf           plot.factor*        plot.formula*       plot.hclust*        plot.histogram*     plot.HoltWinters*  
[13] plot.isoreg*        plot.lm             plot.medpolish*     plot.mlm            plot.ppr*           plot.prcomp*       
[19] plot.princomp*      plot.profile.nls*   plot.spec           plot.spec.coherency plot.spec.phase     plot.stepfun       
[25] plot.stl*           plot.table*         plot.ts             plot.tskernel*      plot.TukeyHSD      

   Non-visible functions are asterisked

Continue reading

Debug in R #4: Post-Mortem Debugging


エラーが出ちゃったあとにデバッグする

今までのやり方は、前もってデバッグを仕込んでおいて、動作を確認する、という感じなので、デバッグすべき場所が分かっていることが前提だった。だけど多くの場合、「エラーどこで起こってんのー」と、死んだあと(post-morten)にデバッグしたいことが多々ある。

デフォルトではRはエラーがどこで起こったか非常に分かりづらいんだけど、post-morten debuggingが簡単にできる方法が幾つかある。

  • tracebackでエラーまでのコールスタックをたどる。
  • option(error)をいじってエラーをデバッグのトリガーにする。
  • 上と似てるけど、dump.framedebuggerを組み合わせて、天国からデバッグする。
  • おまけ

Continue reading

Debug in R #2: How to enter an interactive debugging


デバッグモードに入る方法

いくつかある。基本的には、

  • debug: 既存の関数でお手軽にデバッグしたい。
  • browser: 自分で関数書いてます、デバッグしたい。
  • setBreakpoint: スクリプトファイルの行番号からデバッグしたい。
  • trace: いろいろやりたい。別記事で解説。

という感じだと思う。他にもあるかもしれない。

Continue reading