【问题标题】:why does map_if() not work within a list为什么 map_if() 在列表中不起作用
【发布时间】:2017-03-14 09:35:26
【问题描述】:

请帮帮我

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)

【问题讨论】:

    标签: r dictionary if-statement purrr


    【解决方案1】:

    因为您需要映射到较低的一个杠杆,所以列位于第 2 级。所以您可以这样做:

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

    或者:

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

    如果没有人可以做到

    map_depth(cyl, 2, mean)
    

    【讨论】:

    • 非常感谢。我尝试了 map(cyl, map_if(is.numeric, mean)),我非常接近。我现在非常清楚。这将使生活变得如此轻松。再次感谢您!
    • 增加了一个选项。
    • 更新:at_depth() 已失效,请改用map_depth()
    【解决方案2】:

    你可以试试lapply:

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

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

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

    那是因为……

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

    【讨论】:

    • 像魔术一样工作!万分感谢。我试过没有成功 "map(map_if(cyl, is.numeric, mean))"
    • 谢谢@count。这些例子让我非常清楚!你们太棒了。
    • @cephalopod 该示例的功劳归于@Simon O`Hanlon,我只提供了代码;)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多