第5章 tidyverse(dplyr)で再現 ・ ノック 69 / 100 ・ [[000 - はじめに(使い方と目次)|目次]]<br>
← 前 [[068 - グループごとに要約する]] ・ 次 → [[070 - ネイティブパイプを使う]]
> [!info] パイプ %>% は「左の結果を右の関数の最初の引数として渡す」記号です
> **パイプ**(`%>%`)は「左側の結果を右側の関数に渡す」という意味の記号です。「料理のレシピ」に例えると、`野菜を洗う %>% 切る %>% 炒める` のように、「前の操作の結果を次に送る」流れを一直線に書けます。
>
> パイプを使わずに書くと `summarise(filter(iris, Species == "setosa"), m = mean(Sepal.Length))` のように内側から外側へ読む必要がありますが、パイプを使うと `iris %>% filter(...) %>% summarise(...)` と上から下へ順番に読めます。コードの意図が伝わりやすくなるのがパイプの大きな利点です。`%>%` は magrittr パッケージ由来で、dplyr 読み込み時に使えるようになります。
## 問題
`iris` を `%>%` でつないで「setosa だけに絞り、Sepal.Length の平均を求める」処理を一行の流れで書いてみましょう。
> [!tip] ヒント
> `iris %>% filter(...) %>% summarise(...)` という形になります。各ステップが前の結果を受け取ります。
> [!success]- 回答を見る
> ```r
> library(dplyr)
> iris %>%
> filter(Species == "setosa") %>%
> summarise(m = mean(Sepal.Length))
> ```
> ```
> m
> 1 5.006
> ```
> Rベースでは `mean(iris[iris$Species == "setosa", "Sepal.Length"])` のように内側から読む書き方でしたが、`%>%` を使うと「irisを使って → setosaに絞って → 平均を求める」と上から順番に読めます。