为什么map_if()在列表中不起作用

时间:2017-03-14 09:35:27

标签: r dictionary if-statement purrr

请帮帮我

1)为什么map_if在列表中不起作用
2)有没有办法让它发挥作用 3)如果没有,有哪些替代方案

提前致谢。

library(dplyr) 
library(purrr) 

cyl <- split(mtcars, mtcars$cyl) 

# This works
map_if(mtcars, is.numeric, mean) 

# This does not work 
map_if(cyl, is.numeric, mean)

3 个答案:

答案 0 :(得分:4)

因为您需要映射到下方的一个控制杆,所以列位于第2级。因此您可以执行以下操作:

map(cyl, ~map_if(., is.numeric, mean))

或者:

map(cyl, map_if, is.numeric, mean)

没有,如果可以做到

at_depth(cyl, 2, mean)

答案 1 :(得分:3)

您可以尝试lapply

lapply(cyl, function(x) map_if(x, is.numeric, mean))

您正试图map_if()使用list data.frames。谓词将针对每个data.frame进行测试,而不是针对data.frame的每一列进行测试,例如:

is.numeric( cyl[[1]] )
#  [1] FALSE

那是因为......

is.data.frame( cyl[[1]] )
#  [1] TRUE

答案 2 :(得分:0)

map_if(cyl, is.numeric, mean) %>%as_tibble() 这可用于绘图、汇总、变异等。