3.5 パイプ
以下のように、複数のverbを続けて実行すると、可読性が悪くなります。どのような処理をしているのでしょうか。
hourly_delay <- filter(
summarise(
group_by(
filter(
flights,
!is.na(dep_delay)
),
year, month, day, hour
),
delay = mean(dep_delay),
n = n(),
.groups = "drop"
),
n > 10
)magrittrパッケージ(dplyrが入っていればインストールされている)で提供されているパイプ演算子を用いると、このような処理を簡潔に記述できる。一般に、ある関数f()をオブジェクトxに引数yを伴って適用する場合、
x %>% f(y)
と記述すれば
f(x, y)
を実行したことになります。パイプはいくつも続けて適用することができるため、上の処理は
hourly_delay <- flights %>%
filter(!is.na(dep_delay)) %>%
group_by(year, month, day, hour) %>%
summarise(delay = mean(dep_delay),
n = n(), .groups = "drop") %>%
filter(n > 10)
hourly_delay## # A tibble: 5,813 x 6
## year month day hour delay n
## <int> <int> <int> <dbl> <dbl> <int>
## 1 2013 1 1 6 2.16 51
## 2 2013 1 1 7 3.51 49
## 3 2013 1 1 8 0.448 58
## 4 2013 1 1 9 5.34 56
## 5 2013 1 1 10 0.333 39
## 6 2013 1 1 11 3.19 37
## 7 2013 1 1 12 5.75 56
## 8 2013 1 1 13 20.4 54
## 9 2013 1 1 14 17.2 48
## 10 2013 1 1 15 7.77 66
## # ... with 5,803 more rows
のように記述できます。