★データ解析備忘録★

ゆる〜い技術メモ

『R言語徹底解説』(原著 "Advanced R")を読んだので感想を書く

待望の『R言語徹底解説』が届きました。(2/10)


f:id:songcunyouzai:20160212013824j:plain:w300
R言語徹底解説

R言語徹底解説

本来は昨年のクリスマスあたりに発売される予定だったので、二か月近く待ったことになります。
僕はかなり早くから予約していたので、まさに「待望」といった感じです。

二週間以上かかってようやく通して読みました。まだ理解できていない部分も多いのでこれから何度も読み直さなければいけないなあという感じですが、やはり感想を書いておかないとということで感想を書いていきます。ちょっと長くなります。

どんな本か

さて、この本はご存知の通りHadley Wickham*1著"Advanced R"の和訳本です。
Rを使っている人なら、ggplot2dplyrといったパッケージでHadley氏の恩恵を受けていることでしょう。
そんなHdaley氏が10年以上Rを研究した成果がこの本には詰まっています。

また、翻訳者陣に関しても各々がRに関する本を多数執筆しており、Rの中級者以上で彼らを知らない人はほとんどいないだろうというくらい実力も折り紙付きの方々なので、翻訳書として安心して読むことができます。

内容は以下で追いますが、先に総評・感想、不満点を書いておこうと思います。

総評・感想

この本が素晴らしい点は二つあると思います。
まず、本当にR言語について詳細に書かれていること。データフレームやリストからデータを抽出するといった基本的なことでさえ一章が割かれてますし、読んでいて今まで知らないことばかりだったので(単に僕が無知なだけですが)、購入してよかったと思います。また、R言語についてかなり根本的ンところまで書かれているので、業務でRを使うときも今までは思いつかなかったようなアイデアが出てきたりして自分でも驚いてます。

二つ目は、この本が翻訳書として優れていること。オライリーの翻訳書なんかでは日本語として不自然だったり何を言っているのかわからない箇所があることがありますが、この本はそういうことは一切ありません(誤植は多数ありますが)。


不満

ちょっとケチをつけてみます。
この本はRというプログラミング言語について詳細に記述された本です。ですので、普通にプログラミングの本です。それゆえ本文中には多くのプログラミング用語が注なしで当たり前に出てきます。ここがこの本のちょっと残念なところかなと思います。本文中で「中級以上のユーザー向け」と書かれてはいるものの、もう少し訳注があってもいいのかなと思いました。

ですので、この本をこれから買うという方はあくまでも「R言語の仕組みを詳細に書いたプログラミングの本」という認識で購入して下さい。

内容

各部に何が書かれているかと自分の体験談(?)を簡単に書いていきます。

導入

この本が書かれた背景、および想定する読者層などが書かれています。Hadley氏の熱意はここを読めば伝わってくるでしょう。想定する読者層として、

  • R中級者以上でRについて深く知りたい人
  • 他に精通している言語があるが、Rは学習中で、Rの挙動について知りたいプログラマ

上述したプログラミング用語が当たり前に出て来たのはこのあたりが理由かなと思います。

印象に残ったのは、この本がRstudioのR Markdownを使って書かれていること(すげえ!)と、謝辞にTwitterのIDが羅列されていること(笑)です。

第Ⅰ部 基本編

Rの超基本となるアトミックベクトル、データフレーム、リストなどの扱いやそこからデータを抽出する方法について書かれています。個人的にRで特徴的なのは、Rにはスカラーはなく、長さ1のアトミックベクトルとして扱われることかなあと思っています。これは本を読む前から知っていましたが未だにほかの言語を触ると違和感を覚えます。
後半はオブジェクト指向言語としてのRについて書かれていて、各オブジェクトの扱いとでデバッキングの方法・心構え(?)が説明されています。RのオブジェクトにS3とS4などがあるのは知りませんでした。

第Ⅱ部 関数型プログラミング

Rはオブジェクト指向型言語であり関数型言語であるという変わった言語ですが、ここではそのうち関数型プログラミングについて書かれています。メインを占めるのは11章の「汎関数」で、リストの各要素に同じ関数を適用するlapplyや同じapply系の関数についてその仕組みまで突っ込んで解説されています。とくにいかにforループを避けるかといったことは印象的でした。僕はlapply関数について使い方は知ってはいたものの、その仕組みまでは知らなかったので、この章はたいへん参考になり、実務でも大いに役立ちました。

第Ⅲ部 言語オブジェクトに対する計算

このあたりからいわゆるプログラミングの用語について知らないと読んでて何を言っているのか分からなくなってきます(笑)。
Rは、値だけでなくその値を導く操作に対しても演算を行えるというちょっと変わった性質を持っていますが、この性質についての説明が13章「非標準評価」に書かれています。続く14章では、表現式*2について説明されています。こおのあたりになってくると、実務や普段の分析で役に立つというよりも、パッケージの作成であったり関数を書き換えたりするときに知っておかなきゃいけない、というベルだと思いました。

第Ⅳ部 パフォーマンス

R特有の「遅さ」が「分かりやすさ」と「使いやすさ」に起因していることを挙げ、それを可能な限り克服する方法が述べられています。最後の19章(Rcppについて)、20章(RとC言語)はもはやほぼC++とCのことがある程度分かっていないと全く分からに様な感じですが、Rが苦手な部分を躊躇なくC++やCに任せるというのは、賢明な判断なのでしょう。(ただ、僕はRの遅さが嫌いなのでそもそもRではなくSASを使ってしまうことが多いのですが...)

*1:Rstudio社の最高技術者

*2:Rによって実行できる処理を表すオブジェクト