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)。