pipeR の使い方
@hoxo_m
2014/09/20
自己紹介
• hoxo_m
某ECサイトでデータ分析をやっています
• RPubsHotEntry
RPubs のホットエントリを流す Twitter Bot
フォロワー 100人達成!
https://twitter.com/RPubsHotEntry
近況
• pipeR の使い方を翻訳しました
• http://qiita.com/hoxo_m/items/b80778d46684b818abd2
所沢義男
• 先月の Tokyo.R #42
• R のパイプ界隈の話
– dplyr
– magrittr
– pipeR
R のパイプ界隈
dplyr & magrittr
pipeR
結論
• クオンツ蓮君を応援しよう
by 村上h 所沢義男
大仏様が突撃
• (訳) 蓮君、日本で君の pipeR が紹介されて、みんな君のファンになったよ!
• (訳) そのスライド、グーグル翻訳ったけど蓮君って俺のこと?おもろいね!
返信
一連のやりとりを 調子に乗って fav
分かる 分かる Why?
蓮君にフォローされてる日本人
結論
• クオンツ蓮君を応援しよう
by 村上h 所沢義男
という経緯で
pipeR の使い方を翻訳することに。
今日は内容をご紹介
パイプってなに?
• 左辺の値を右辺に渡す書き方
x %>% f() f(x)
x %>% f1() %>% f2() %>% f3()
f3(f2(f1(x)))
パイプの連鎖をパイプラインという
Hadley 神 (dplyr)
• データハンドリングでパイプあったら 便利だよねー
• 神「パイプあれ」→ %.%
iris %.% filter(Species=="setosa")
• かなり汎用的な作り
1:10 %.% sum() みたいなのもいける
• 参考:%.%演算子の中身
• データハンドリング以外でもパイプ使いたい
• 記号は %>% の方がいいよね
• R の演算子に対応する関数あったら便利
• 1+1 – 1 %>% `+`(1) 普通に書いた場合
– 1 %>% add(1) magrittr
magrittr
• R のすべての処理をパイプで書きたい
• パイプラインを壊さないように副作用を持たせる
• cars %>>%
(~ plot(dist ~ speed, data=.)) %>>%
(lm(dist ~ speed, data=.)) %>>%
abline(col="red")
pipeR
これが読めるようになろう
インストール
• install.packages("pipeR")
• パッケージ読みこみ
• library("pipeR")
モチベーション
• 関数がネストしてると読みにくい
⇒ パイプを使うとほらスッキリ!
構文
1. 関数の最初の引数にパイプ
2. 表現式中のドット(.)にパイプ
3. ラムダ式でパイプ
4. 副作用ありパイプ
5. 代入ありパイプ
6. オブジェクトから要素を抽出
1. 関数の最初の引数にパイプ
• 基本構文
x %>>% f()
※ただし、f <- function(x) { … }
2. 表現式中のドット(.)にパイプ
• 最初の引数でない場合
y %>>% (f(x, .))
※ただし、f <- function(x, y) { … }
3. ラムダ式でパイプ
• ドット(.) が複数の意味に取れる場合困る
• ラムダ式 x ~ f(x) を使う
4. 副作用ありパイプ
• print(), plot() など、帰り値の無い関数をパイプラインの途中に含めたい
x %>>% (~ plot()) %>>% f()
5. 代入ありパイプ
• 途中の結果を変数に保存しつつパイプしたい
x %>>% f() %>>% (~ var_name)
5. 代入ありパイプ
• 何か変換をかけて代入したい
x %>>% f() %>>%
(~ g(.) -> var_name)
6. オブジェクトから要素を抽出
• リストからの要素抽出 list$element をパイプでやりたい
list %>>% (element)
まとめ
• pipeR の使い方を翻訳しました
• http://qiita.com/hoxo_m/items/b80778d46684b818abd2