如何将函数映射到嵌套tibble列表中的每个对象?
批量处理嵌套tibble列表的函数应用方案
你手里有一个包含嵌套tibble的多层列表,想给列表里的每个嵌套tibble都加上自定义计算的列,但直接用mutate会报错——因为mutate是给tibble用的,外层容器是普通列表,得用嵌套的map操作实现批量处理。
直接上可行代码:
library(tidyverse) # 自定义计算函数 fun1 <- function(data) { min(data$Sepal.Length) } # 构造嵌套列表示例 list_nested_tibbles <- list( list1 = iris %>% group_by(Species) %>% nest(), list2 = iris %>% group_by(Species) %>% nest() ) # 嵌套map完成批量处理 processed_list <- list_nested_tibbles %>% map(~ .x %>% mutate(minimum = map_dbl(data, fun1))) # 查看处理后的结果 processed_list$list1 #> # A tibble: 3 x 3 #> # Groups: Species [3] #> Species data minimum #> <fct> <list> <dbl> #> 1 setosa <tibble [50 x 4]> 4.3 #> 2 versicolor <tibble [50 x 4]> 4.9 #> 3 virginica <tibble [50 x 4]> 4.9 processed_list$list2 #> # A tibble: 3 x 3 #> # Groups: Species [3] #> Species data minimum #> <fct> <list> <dbl> #> 1 setosa <tibble [50 x 4]> 4.3 #> 2 versicolor <tibble [50 x 4]> 4.9 #> 3 virginica <tibble [50 x 4]> 4.9
逻辑说明
外层用map()遍历整个列表,对每个子元素(也就是list1、list2这类分组嵌套后的tibble),执行你之前对单个元素做的mutate + map_dbl操作——内层的map_dbl负责遍历每个分组的嵌套数据框,计算出对应的最小值,最终批量完成所有子元素的处理。
内容的提问来源于stack exchange,提问作者Dasr
相关产品推荐
相关产品推荐

