R 4.1からデフォルトでパイプ演算子|>
が使えるようになりました。これはtidiverse
で使われてたmagrittr
由来のパイプ演算子%>%
とは微妙に仕様が異なります。使う側から見て一番大きな違いは.
を使ってオブジェクトを渡せないことかなと思います。いくつかメモを残します。
基本
まずは従来のpipe%>%
を使った書き方。
これは動く。
# 😀
rnorm(100) %>% hist
これも動く。
# 😀
rnorm(100) %>% hist()
こいつも動く。
# 😀
rnorm(100) %>% hist(.)
新しいpipe|>
を使った書き方。
function()
の形が必要なので、これは動かない。
# 😰
rnorm(100) |> hist
これは動く。
# 😀
rnorm(100) |> hist()
そして、これは動かない。.
を使ってオブジェクトを渡せないため。
# 😰
rnorm(100) |> hist(.)
ggplot2
.
が使えないため、もちろんこれは動かない。
# 😰
tibble(x = rnorm(100), y = rnorm(100)) |>
ggplot(., aes(x, y)) +
geom_point()
どうやるのかというと、データを指定しないでOK。
# 😀
tibble(x = rnorm(100), y = rnorm(100)) |>
ggplot(aes(x, y)) +
geom_point()
他の例:回帰
まずは%>%
をつかった回帰。
# 😀
tibble(x = rnorm(100), y = rnorm(100)) %>%
lm(y ~ x, data = .)
.
が使えないので、とりあえず下記のように書くことはできる。
# 😰
tibble(x = rnorm(100), y = rnorm(100)) |>
lm()
しかし、これだとxをyで回帰した結果が出てきてしまう。じゃあ、どうやるのかというと、下記のようなラムダ式(無名関数)を使って、
\(x) x + 1 is parsed as function(x) x + 1.
こんな感じ。
# 🙄
tibble(x = rnorm(100), y = rnorm(100)) |>
{\(d) lm(y ~ x, data = d)}()
なので、%>%
のほうが使いやすい印象。
そもそも、|>
を使う利点は?というと、|>
は爆速らしい (The New Base Pipe)。