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

のように記述できます。