このパッケージがすごい2014: magrittr
library(magrittr)
library(dplyr)
library(ggplot2)

magrittr: a forward-pipe operator for R

パイプ 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が代入される

Tee演算子

パイプライン処理の途中で結果を出力(plot)し、値等を表示したいときにはTee演算子: %T>%が便利。イマイチ理解できていないので公式のサンプル↓

rnorm(200) %>%
  matrix(ncol = 2) %T>%
  plot %>%
  colSums
## [1] -0.1087972  8.0984311

Dollar演算子

データフレーム内の変数にアクセスするときにはDollar演算子: %$%が便利。

iris %$%
  ggplot(data = .,
         aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()

%<>%

算術計算などの処理を行い、値を上書きするときには%<>%が有効。

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

対抗馬 %>>% pipeR

magrittrパッケージ同様に、パイプ演算子を扱うパッケージとしてpipeRがありますが、こちらはまだ利用していません。悪しからず。国内のR-userたちはこちらのpipeRをおすすめしている人が多いですね。紹介記事などもpipeRのものが多い。pipeR三銃士というかっちょい人たちもいます。

参考

pipeRに関して...