0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

R 4.1の新しいpipe `|>`の使い方メモ

Last updated at Posted at 2021-07-03

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

参考

The New Base Pipe

CHANGES IN R 4.1.0 NEW FEATURES

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?