如何在R中使用purrr::map生成拼接后的列表结果对象
解决方案
map 会将每次调用 my_func 返回的列表作为单独元素存入结果列表,因此得到的是两层嵌套结构,要得到和手动用c()拼接一致的单层列表,只需对map返回的嵌套结果做拍平/拼接处理即可,以下是两种常用实现方式:
方法1:直接拍平嵌套列表
library(purrr) library(stringr) terms <- c("setosa", "virginica") my_result_with_map <- terms %>% map(my_func) %>% list_flatten()
如果使用旧版本purrr,也可以替换为purrr::flatten(),效果一致。
方法2:模拟原有手动拼接逻辑
和手动写c(my_func("setosa"), my_func("virginica"))的逻辑完全一致,用reduce将map返回的多个列表按顺序拼接:
my_result_with_map <- terms %>% map(my_func) %>% reduce(c)
结果验证
两种写法得到的结果和原有my_result完全一致,运行identical(my_result, my_result_with_map)会返回TRUE,length(my_result_with_map)结果为100,符合预期。
内容的提问来源于stack exchange,提问作者icedcoffee
相关产品推荐
相关产品推荐

