Rプログラミング本格入門をご恵贈頂きました
報告が遅くなりましたが「Rプログラミング本格入門: 達人データサイエンティストへの道」を出版社様・翻訳者様よりご恵贈頂きました!
ありがとうございます m(_ _)m
著者である @renkun_ken は{pipeR}や{rlist}の開発者であり、Rに関する造詣の深さはTokyo.Rの大御所である @dichika氏、@teramonagi氏、@hoxo_m氏らがpipeR三銃士を結成するほどです。*1*2
なので内容についても申し分なくRの基礎から内部の処理、データハンドリングなど様々な分野について非常に丁寧に解説されています。なのですがグラフィックスや統計モデリング・機械学習などについてはあまり解説がない*3ためみんなのRなどでRの概要を学んだ方が次へのステップアップとして本書を読むのが良いのではないでしょうか。また本書の最後に
さらに深く学ぶことに関心があるのであれば、Hadley Wickam 氏による Advanced R を読むことを強く薦める.
とあるように本書を読んでから R言語徹底解説 を読むと理解がより深まると思います。
以下のTweetの通り12/2(土)に開催されるJapan.R 2017で著者がいらっしゃるとのことなので参加される方は本書とサインペン持参で臨みましょう!
タカヤナギ=サン「俺の名前を言ってみろーッ」
— マストバーイ (@dichika) 2017年11月28日
参加者「れ、蓮君…」みたいなサイン会が開かれるそうなのでパンダ本はマストバイ&持参ですね #japanr
猿が一部情報漏えいしてますが、今年の #japanr 、私が私費で #パンダ本 の原著者・Kun Ren(通称・蓮くん)をスペシャルゲストとしてお呼びしています。
— Shinichi Takayanagi (@_stakaya) 2017年11月28日
なので、 #パンダ本 をお持ちの方は会場まで持ってくるとサインがもらえるかも?です是非!

Rプログラミング本格入門: 達人データサイエンティストへの道
- 作者: Kun Ren,湯谷啓明,松村杏子,市川太祐,株式会社ホクソエム
- 出版社/メーカー: 共立出版
- 発売日: 2017/11/23
- メディア: 単行本
- この商品を含むブログを見る
以下は各章のメモ
3.1.3 プロジェクトファイルの管理
Rのスタイルガイドなどはいくつかあるが、本書ではプロジェクト内でのディレクトリ・ファイル構成について言及されており非常に参考になる。RStudioの1.1.28以降ではプロジェクトのテンプレートを作成できる*4ようなので本書を参考にテンプレート化したい。
4.2.4 ベクトル化されたifを使う:ifelse
この関数は論理値型ベクトルを判定するための条件として使用し、ベクトルを返す
ifelse() の説明は みんなのRにもあるが、ベクトルを返すことについては言及されていなかった。自分がRを学び始めた頃、このことを知らずにハマったので関数を作る際には気をつける必要がある。
例えば引数に3の倍数を与えたときだけアホになる関数nabeatsuを以下のように定義する。
nabeatsu <- function(x) { if(x %% 3 == 0) { return("( ꒪⌓꒪)") } else { return(paste("=͟͟͞͞( •̀д•́)))", as.character(x))) } }
この関数は引数にスカラー(一次元ベクトル)を指定すると期待通りに動作するが、ベクトルを指定するとwarning()が表示され期待通りに動作しない。
> nabeatsu(1) [1] "=͟͟͞͞( •̀д•́))) 1" > nabeatsu(3) [1] "( ꒪⌓꒪)" > nabeatsu(1:10) [1] "=͟͟͞͞( •̀д•́))) 1" "=͟͟͞͞( •̀д•́))) 2" "=͟͟͞͞( •̀д•́))) 3" "=͟͟͞͞( •̀д•́))) 4" "=͟͟͞͞( •̀д•́))) 5" [6] "=͟͟͞͞( •̀д•́))) 6" "=͟͟͞͞( •̀д•́))) 7" "=͟͟͞͞( •̀д•́))) 8" "=͟͟͞͞( •̀д•́))) 9" "=͟͟͞͞( •̀д•́))) 10" Warning message: In if (x%%3 == 0) { : the condition has length > 1 and only the first element will be used
期待通りに動作させるには ベクトル化されたifとしてifelse()を使用する。
nabeatsu <- function(x) { ifelse(x %% 3 == 0, "( ꒪⌓꒪)", paste("=͟͟͞͞( •̀д•́)))", as.character(x))) }
> nabeatsu(3) [1] "( ꒪⌓꒪)" > nabeatsu(1:10) [1] "=͟͟͞͞( •̀д•́))) 1" "=͟͟͞͞( •̀д•́))) 2" "( ꒪⌓꒪)" "=͟͟͞͞( •̀д•́))) 4" "=͟͟͞͞( •̀д•́))) 5" [6] "( ꒪⌓꒪)" "=͟͟͞͞( •̀д•́))) 7" "=͟͟͞͞( •̀д•́))) 8" "( ꒪⌓꒪)" "=͟͟͞͞( •̀д•́))) 10"
11.1 リレーショナルデータベースの操作
意外とRによるデータベース操作を解説した書籍は少ないように感じる。本書では
- データベースへの接続・切断
- トランザクションの使用
- チャンク単位での処理
などデータベースを操作する際に注意する点が丁寧に説明されている。自分の場合データベースへの直接接続は禁じられていることが多いため、Rからデータベース操作することはあまりないが今後のリファレンスとしたい。
12.3.3 データテーブルの変形
data.tableパッケージにはその中で紹介した dcast() および melt() が同様の挙動を示し、かつ高速な形で実装されている
{data.table}はfread()でファイルを高速に読み込む用途でしか使用しておらず、データの縦横変換はtidyr::spread(), tidyr::gather()で行なっていた。readr::read_delim()よりもdata.table::fread()の方が速いので縦横変換についても別途検証したいと思う。
本書は{base}を基本にしつつも必要であれば{dplyr}や{lubridate}などのtidyverseのパッケージも紹介されている。また著者が作成されたパッケージ{rlist}については12.5節に解説されているがそこでも{purrr}が紹介されている。
のイメージが強いが本書は極めてフェアに解説されている。今後もクオンツ蓮君を応援したい。