为什么 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.frames
的 list
上使用 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()
这可用于绘图、总结、变异等。
请帮帮我
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.frames
的 list
上使用 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()
这可用于绘图、总结、变异等。