はじめに
『R言語徹底解説』という本を紹介したいと思う。この本は、R言語の中級者から上級者になるための助けになる本だ。この本を通じて、上級者になるために不可欠なR言語の仕組みを学べるのだ。
- Wickham, H.〔著〕、石田基広・市川太祐・高柳慎一・福島真太朗〔訳〕.(2016).『R言語徹底解説』東京:共立出版.
- 原著:Wickham, H. (2015). Advanced R. Boca Raton, FL: CRC Press.
- 日本語版の版元での紹介(詳細目次のほか、第1章の全文が公開されている)
なお、英語の原文は以下にしめすアドレスで全文無料公開されている。
どのような人が読むべきか
この本は、プログラミング言語としてのRの仕組みを詳しく学ぶための本である。先に触れたように、Rの中級者が上級者になりたいと考えているときに読むと良い。なお、ここでの中級者・上級者は、以下のようなものをイメージしている(もちろん分析手法の難易度によって一概に言えないところはあるのだが)。
- 中級者:分析をする際に、どのような関数・パッケージを使えば良いか知っているか、ヘルプなどで探し出すことができる。
- 上級者:分析をする際に、どのようにすれば効率的に行え、なぜそのような書き方をすれば良いのかという理由が分かる。
また、この本の扱っている内容はなかなか難しいので、Rの初心者には向かない。初心者がRについてプログラミング言語的側面も含めて学びたければ、以下の2冊を読むことをおすすめする。
- Lander, J. P.〔著〕、高柳慎一・牧山幸史、箕田高志〔訳〕(2015). 『みんなのR:データ分析と統計解析の新しい教科書』東京:マイナビ出版.
- 原書:Lander, J. P. (2014). R for Everyone: Advanced Analytics and Graphics. Upper Saddle River, NJ: Addison-Wesley.
- 本ブログに、「Rのプログラミング言語的側面を学びたい人のための『みんなのR』」というレビュー記事あり。
- 日本語版の版元の情報によれば、2018年4月19日に第2版の翻訳が発売されるとのこと。
- Wickham, H., & Grolemund, G.〔著〕、黒川利明〔訳〕(2017). 『Rではじめるデータサイエンス』東京:オライリージャパン.
- Wickham, H., & Grolemund, G. (2016). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. Sebastopol, CA: O’Reilly Media.
非プログラマとR
Rはプログラミング言語だ。それは間違いない。ただ、普通のプログラミング言語と違うところがある。それは、プログラマでない人が使うことが多いということだ。
Rは統計処理に優れた言語であり、専業のプログラマが使うというより、統計処理が必要となる科学者などが使うことが多いと思われる。こうした人たちは、統計が分かっていたとしても、プログラミングが必ずしも得意とは限らず、効率的でないプログラムを書いてしまうことがある。以下の引用は、Rに限定された話ではないが、統計処理を必要とする科学者が書いたプログラムの様子をうかがわせるものだ。
プロのプログラマーは、学術界にいるプログラミングを自習した友人が書いたぞっとするようなコードについての話を交わすことがしばしばある。
正直なところ、「ぞっとするようなコード」でもなんとか分析はできてしまう側面はある。しかし、それは効率的ではないし、ミスを引き起こしやすい。
そうならないためにも、本格的にRを使いこなしたいのであれば、プログラミング言語としてのRの仕組みを良く理解しておく必要がある。
Can one be a good data analyst without being a half-good programmer? The short answer to that is, ‘No’. The long answer to that is, ‘No!’.
(引用者訳:ある程度優秀なプログラマになることなしに、優秀なデータ分析者になれるだろうか? その答えを短く言えば、「否」だ。その答えを長く言えば、「否」だ。)
この本で得られるもの

この本では、プログラミング言語としてのRの仕組みを学べる。これを学ぶことで、Rによるプログラムが効率的で再利用可能なものになる。
データ分析について学びはじめた当初は、それほど大量のデータは扱わないかもしれない。しかし、成長するにつれ、だんだんと大量の複雑なデータを扱いたいと思うようになってくることがあるかもしれない。そういったときに、効率化ができないと、1時間で済むことが何日もかかってしまうかもしれない。また、途中でとんでもないミスをしてしまうかもしれない。
そのような悲劇を防ぐためには、Rというプログラミング言語の特色を知っている必要がある。問題が発生したときに、言語の特色を知っていれば解決するのに役立つ。
例えば、ある関数を呼び出しそうとしたときに、それがうまく見つからないことがある。その原因は、探そうとしたものが、レキシカルスコープの中に入っていないことにあるかもしれない。このような場合、Rのレキシカルスコープの仕組みを知らないと問題はうまく解決できない。(なお、レキシカルスコープの話は、『R言語徹底解説』の6.2節に載っている。)
具体的内容
この本に載っている話題は多岐にわたる。主な内容を以下に挙げておこう。
- コーディングスタイルガイド(第5章)
- オブジェクト指向実践ガイド(第7章)
- デバッグの方法(第9章)
- 関数型プログラミング、汎関数など(第II部)
- 非標準評価(第11章)
- Rで良いパフォーマンスを得るための方法、コードの最適化など(第IV部)
また、ベクトルや関数など、Rの入門書にも載っているような基本的な要素についても説明がある。ただし、入門書とは違って、さらに事細かに説明している。
なお、この本の原著が2015年に出たということもあり、purrr
パッケージのように比較的最近出てきたものは扱われていない。ただ、そのことをもってこの本が足りていないというつもりはない。この本は、Rというプログラミング言語のより根源的な話を説明しているのであり、それは簡単に時代遅れになるものではない。つまりは、新しいパッケージが出てこようとも、色あせないような内容だということだ。
説明のスタイル
この本は、扱っている内容こそ難しい内容が多いものの、説明は比較的分かりやすいものになっている。例えば、どんなことを話すかについても各章のはじめに分かりやすくまとめられているため、話の流れが見やすくなっている。
また、この本にはさまざまなところにクイズやエクササイズ(練習問題)が載っており、こうした問題を解くことで理解が深まる仕組みになっている。
多くの章の冒頭には、読み手の理解の程度を問うクイズが付いている。冒頭を読む時点でこのクイズの答えが分かる必要はない。答えはその章の最後にまとめて書いてあるし、そこまで行かなくても読んでいくうちに自ずから答えが分かるようになっている。逆に見ると、冒頭のクイズは、どのようなところに注意して読むべきかを示してくれる指標として捉えることもできる。
また、クイズのほかに、多数のエクササイズが付いており、これを解くことで理解が深められるようになっている。
読み方
この本は、できれば1回通読しておこう。分厚いので、読み終えるまで時間がかかるかもしれない。しかし、通読することでR言語を使いこなす際に必要となる知識を全面的に知ることができる。苦労するだけの価値はある。
通読する際には全部を事細かに理解しなくてもかまわないと思う。どういう話が載っているのか大体分かれば、Rプログラミングでつまずいたときのリファレンスとして、手に取りやすい場所に置いておこう。つまずいたときに、辞書を引くようにこの本の関連する部分を調べれば良い。
まとめ
というわけで、Rの上級者になりたい人は、『R言語徹底解説』を読んでおこう。この本を読めば、Rのプログラミング言語としての側面をしっかり学ぶことができ、引いては自分が書くRの分析プログラムが効率的で使いやすいものになるだろう。
分厚い内容を理解するのは大変かもしれないが、それだけの価値はある本だ。