3.5 パイプ
以下のように、複数のverbを続けて実行すると、可読性が悪くなります。どのような処理をしているのでしょうか。
<- filter(
hourly_delay summarise(
group_by(
filter(
flights,!is.na(dep_delay)
),
year, month, day, hour
),delay = mean(dep_delay),
n = n(),
.groups = "drop"
),> 10
n )
magrittrパッケージ(dplyrが入っていればインストールされている)で提供されているパイプ演算子を用いると、このような処理を簡潔に記述できる。一般に、ある関数f()
をオブジェクトx
に引数y
を伴って適用する場合、
x %>% f(y)
と記述すれば
f(x, y)
を実行したことになります。パイプはいくつも続けて適用することができるため、上の処理は
<- flights %>%
hourly_delay 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
のように記述できます。