パイプ演算子と呼ばれる%>%
で、関数を次々と処理していくためのパッケージ。tidyverse
やdplyr
をインストールすると、使えるようになるあれです。パイプ演算子を使うと、一時的な変数を作る必要がなくなるので、コードの可読性が上がります。dplyr
やtidyr
, 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
}
その他のパイプ演算子
%T>%
%$%
%<>%
Function sequences
freduce()
functions()
print(<fseq>)
[[(x,)
,[(x,
エイリアス
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