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

why does map_if() not work within a list

请帮帮我

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)

你可以试试lapply:

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

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

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

那是因为...

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

因为你需要映射到低一级,列在第 2 级。所以你可以这样做:

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

或者:

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

没有 if 也行

map_depth(cyl, 2, mean)

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