从R内置数据集空气质量中获取一个简单数据框并检查其缺失值:
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?
答案 0 :(得分:2)
%>%
中详细说明了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")
的{{1}}参数是一个数字矢量,则从.f
得出
它被转换为提取函数
总结:这是提取每列的第44个元素,并将其约束回数据帧。或者,过分简化,将提取第44行。