『R言語徹底解説』(原著 "Advanced R")を読んだので感想を書く
待望の『R言語徹底解説』が届きました。(2/10)
- 作者: Hadley Wickham,石田基広,市川太祐,高柳慎一,福島真太朗
- 出版社/メーカー: 共立出版
- 発売日: 2016/02/10
- メディア: 単行本
- この商品を含むブログ (29件) を見る
僕はかなり早くから予約していたので、まさに「待望」といった感じです。
二週間以上かかってようやく通して読みました。まだ理解できていない部分も多いのでこれから何度も読み直さなければいけないなあという感じですが、やはり感想を書いておかないとということで感想を書いていきます。ちょっと長くなります。
どんな本か
さて、この本はご存知の通りHadley Wickham*1著"Advanced R"の和訳本です。
Rを使っている人なら、ggplot2
やdplyr
といったパッケージでHadley氏の恩恵を受けていることでしょう。
そんなHdaley氏が10年以上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について説明されています。こおのあたりになってくると、実務や普段の分析で役に立つというよりも、パッケージの作成であったり関数を書き換えたりするときに知っておかなきゃいけない、というベルだと思いました。