magrittr

パイプ演算子を使うためのパッケージ

パイプ演算子と呼ばれる%>%で、関数を次々と処理していくためのパッケージ。tidyversedplyrをインストールすると、使えるようになるあれです。パイプ演算子を使うと、一時的な変数を作る必要がなくなるので、コードの可読性が上がります。dplyrtidyr, ggplot2などtidyverseのパッケージと一緒に使うことで、より便利に使えます。

パイプ演算子%>%の基本的な使い方

f(x)の変わり

x %>% f

パイプ演算子%>%の左側から出るデータを、右側の関数の第一引数として処理します。

> rnorm(100) %>% mean
[1] 0.1616695
> rnorm(100) %>% sd
[1] 0.9333032

上記の例では、

rnorm(100) %>% mean

と、

mean(rnorm(100))

は、同じ処理になります。

f(x, y)のように引数が二つ以上あっても使用できる

x %>% f(y)

二つ以上の引数をとる関数を使用する時は、第一引数を省略して書き、第二引数を通常と同じように、指定します。

> iris %>% subset(Species=="versicolor") -> sample
> head(sample)
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51          7.0         3.2          4.7         1.4 versicolor
52          6.4         3.2          4.5         1.5 versicolor
53          6.9         3.1          4.9         1.5 versicolor
54          5.5         2.3          4.0         1.3 versicolor

パイプ演算子はいくつでもつなげらる

x %>% f %>% g %>% h
> trees %>% subset(Girth>12.0) %>% subset(Height>75) %>% subset(Volume>50)
   Girth Height Volume
26  17.3     81   55.4
27  17.5     82   55.7
28  17.9     80   58.3
29  18.0     80   51.5
30  18.0     80   51.0
31  20.6     87   77.0

パイプ演算子の左側を、右側の第二引数とする

x %>% f(y, .)

ドットを使うと、パイプ演算子の左側が代入される

グローバル環境に保存する

パイプ中に変数へ代入するには、永続代入->>を使用する。

> URL %>% read_html() %>% html_node("div.product") %>% html_text ->> txtDT

パイプ演算子の左側を、右側の第二引数以降とする

ドット.を使うと、パイプ演算子の左側が代入される。

x %>% f(y, .)

文字列を置換するgsub()関数は、第三引数に置換させる文字列を指定するので、パイプさせる時は、第三引数にドット.を指定する。 文字列操作

> text <- "\r\nAnti-CD31 antibody\r\n"
> text %<>% gsub("\r\n"," ",.)
> text
[1] " Anti-CD31 antibody "

グローバル環境に保存する

永続代入->>を使用してパイプ中にグローバル変数へ代入する。

> URL %>% read_html() %>% html_node("div.product") %>% html_text ->> txtDT

パイプを分岐させる

中カッコ{}を使用することで、パイプを分岐できる。ただしパイプ直後の関数は第一引数を省略できないので、必ずドット.を明示すること。

> URL %>% read_html %>% {
html_node(., "h3") %>% print
html_node(., "div") %>% print
}

その他のパイプ演算子

Function sequences

エイリアス

magrittrには、パイプ演算子で処理しやすくするための、エイリアスがいくつかある。

データフレームの指定した列・行にアクセスする

extract(x, row, col)
引数  説明 
x データフレーム 
row 行を選択する条件ベクトル 
col 列を選択する条件ベクトル 
> iris %>% extract(.$Species == "versicolor",) %>% head(3)
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51          7.0         3.2          4.7         1.4 versicolor
52          6.4         3.2          4.5         1.5 versicolor
53          6.9         3.1          4.9         1.5 versicolor

データフレームの指定した行を削除する

extract(data, -row,)

行数に-を付けるのと、最後に,を忘れず入れるのがポイント。

> extract(iris, -1:-5,) %>% head
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa

extract2

inset

inset2

リストやデータフレームから指定した要素をベクトルとして抜き出す

use_series$演算子と同じように使うことが出来ます。

データフレームから指定した列をベクトルで抜き出す

> test <- use_series(iris, "Species")
> head(test)
[1] setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica

add

subtract

multiply_by

raise_to_power

multiply_by_matrix

divide_by

divide_by_int

mod

is_in

and

or

equals

is_greater_than

is_weakly_greater_than

is_less_than

is_weakly_less_than

not

データフレームの列名・行名を変更する

データフレームの列名を変更するにはset_colnamesを、行名を変更するにはset_rownames()を使用します。

colnames()rownames()と同様に、データフレームの列名・行名を変更できるが、引数に データフレームと列名・行名のベクトルを取るので、上記パイプを使用して変更ができる。

tibbleなデータの列名を変更する場合、dplyr::renameを使うほうが全ての列名を記入する必要がなく便利。

set_colnames(x, value)
set_rownames(x, value)
引数  説明 
x データフレーム 
value 列名・行名を指定したベクトル 
> set_colnames(iris, c("a", "b", "c", "d", "e")) %>% head
a b c d e
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

set_names

See Also

dplyr

データフレームを操作するためのパッケージ

tidyr

データをtidyに整形する

jsonlite

JSONを処理するためのパッケージ

xml2

XMLを扱うためのパッケージ

rvest

HTMLやXMLを簡単に操作するためのパッケージ

purrr

関数型プログラミングを行うためのパッケージ