INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

Rプログラミング本格入門をご恵贈頂きました

報告が遅くなりましたが「Rプログラミング本格入門: 達人データサイエンティストへの道」を出版社様・翻訳者様よりご恵贈頂きました!

f:id:tak95:20171130140032j:plain:w200

ありがとうございます 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で著者がいらっしゃるとのことなので参加される方は本書とサインペン持参で臨みましょう!

Rプログラミング本格入門: 達人データサイエンティストへの道

Rプログラミング本格入門: 達人データサイエンティストへの道


以下は各章のメモ


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}が紹介されている。

Rグローバルリア充軍団 (※個人の感想です) vs クオンツ蓮君

のイメージが強いが本書は極めてフェアに解説されている。今後もクオンツ蓮君を応援したい。