library(magrittr)
library(dplyr)
library(ggplot2)
パイプ pipe: %>%と呼ばれる演算子を利用できるようになります。データフレーム処理に特化したdplyrパッケージと相性が良いです。。パイプを使うことで、左辺の値を右辺の引数として渡すことができ、ファイルの読み込み、subset関数によるデータ抽出、変形、出力など複数の処理を簡潔に、なおかつ一挙に扱うことができます。
Rではsubset(data.frame(x = 1, y = 1:10), y > 5)という風にネスト構造を扱うことができますが、可読性が低下するのであまりよろしくない感じです。パイプ演算子を使うことで、連続した処理をつなげて表現することができます(パイプライン処理)。さきの例をパイプを使って表現すると以下のように。
data.frame(
x = 1, y = 1:10) %>% # x, y列からなるデータフレームを作成
subset(y >= 5) # y が5以上のものを抽出## x y
## 5 1 5
## 6 1 6
## 7 1 7
## 8 1 8
## 9 1 9
## 10 1 10
x %>% f # というのは f(x)と同等の評価
x %>% f(y) # ... f(x, y)
x %>% f %>% g %>% h # h(g(f(x)))
x %>% f(y, z = .) # .を使うことでz引数にxが代入される
x %>% f(y = nrow(.), z = ncol(.)) # .にはxが代入される
パイプライン処理の途中で結果を出力(plot)し、値等を表示したいときにはTee演算子: %T>%が便利。イマイチ理解できていないので公式のサンプル↓
データフレーム内の変数にアクセスするときにはDollar演算子: %$%が便利。
算術計算などの処理を行い、値を上書きするときには%<>%が有効。
mean(iris$Sepal.Length)## [1] 5.843333
iris$Sepal.Length %<>% sqrt
mean(iris$Sepal.Length)## [1] 2.411318
vignette("magrittr")
(投げやり)
スクリプトのパイプごとに音を鳴らしてくれる楽しいパッケージ(@dichikaさん作)もあります。
-> https://github.com/dichika/pings
magrittrパッケージ同様に、パイプ演算子を扱うパッケージとしてpipeRがありますが、こちらはまだ利用していません。悪しからず。国内のR-userたちはこちらのpipeRをおすすめしている人が多いですね。紹介記事などもpipeRのものが多い。pipeR三銃士というかっちょい人たちもいます。