从R内置数据集airquality获取一个简单的数据框并检查它们的缺失值:
airquality %>% summary
虽然这有效:
airquality %>% map_df(is.na) %>% map_df(sum)
Ozone Solar.R Wind Temp Month Day
<int> <int> <int> <int> <int> <int>
1 37 7 0 0 0 0
,这 - 在purrr语法中 - 也适用:
airquality %>% map_df(~sum(is.na(.)))
Ozone Solar.R Wind Temp Month Day
<int> <int> <int> <int> <int> <int>
1 37 7 0 0 0 0
,这不起作用:
airquality %>% map_df(sum(is.na(.)))
Ozone Solar.R Wind Temp Month Day
<int> <int> <dbl> <int> <int> <int>
1 23 148 8 82 6 13
我的问题是:你怎么解释最后的结果?
计算究竟发生在哪里 - 在dplyr或purrr?
在%>%
中详细解释了help("%>%", package = "magrittr")
周围各种语法的行为。
在这个特定的例子中,sum(is.na(.))
不被解释为一个匿名函数,就像OP似乎期望的那样,因此.
不是匿名函数的参数。
相反,.
是管道的LHS(左侧)。
airquality %>% map_df(sum(is.na(.)))
可以展开为map_df(airquality, .f = sum(is.na(airquality)))
。
如果sum(is.na(airquality))
的44
论证是一个数字向量,那么help("map_df")
将向.f
和map_df
进行攻击,
它被转换为提取器功能
总结:这是提取每列的第44个元素,并将其约束回数据帧。或者,通过一些过度简化,这将提取第44行。