dist = mean(distance, na.rm = TRUE), delay = mean(arr_delay, na.rm = TRUE) ) %>% filter(count > 20, dest != "HNL")
这里关注的是变换操作本身,而不是被变换的对象,这使得代码更易于阅读。你可以把它读作一系列祈使语句:分组,然后汇总,然后过滤。正如这种读法所暗示的,阅读代码时,%>% 的一个好读法是“然后”。
在幕后,x %>% f(y) 会转换为 f(x, y),而 x %>% f(y) %>% g(z) 会转换为 g(f(x, y), z),依此类推。你可以使用管道以从左到右、从上到下的方式重写多个操作,使其更易读。从现在开始我们会频繁使用管道,因为它显著提高了代码的可读性,我们将在第 14 章中更详细地讨论它。
使用管道是属于 tidyverse 的关键标准之一。唯一的例外是 ggplot2:它是在管道被发现之前编写的。遗憾的是,ggplot2 的下一个版本 ggvis 虽然确实使用了管道,但尚未成熟到可以正式使用。缺失值 flights %>% #>
你可能对我们之前使用的 na.rm 参数感到疑惑。如果我们不设置它会发生什么?
group_by(year, month, day) %>% summarize(mean = mean(dep_delay)) #> Source: local data frame [365 x 4] #> Groups: year, month [?] #> year month day mean #>
我们得到了很多缺失值!这是因为聚合函数遵循缺失值的一般规则:如果输入中有任何缺失值,输出就会是缺失值。幸运的是,所有聚