如何按元素名称高效逐元素合并两个列表(无循环)
按元素名称高效合并两个列表(无循环实现)
我想找一种无需循环的高效方法,按元素名称合并两个列表。试过用sapply()获取名称的方式,但没得到想要的结果。
示例数据
列表1
mylist1 <- list(region1 = 1:3, region2 = 5:7) # 输出: # $region1 # [1] 1 2 3 # # $region2 # [1] 5 6 7
列表2
mylist2 <- list(region1 = "#E8C506", region2 = "#F3B508") # 输出: # $region1 # [1] "#E8C506" # # $region2 # [1] "#F3B508"
期望结果
mylist3 <- list(region1 = list(1:3, "#E8C506"), region2 = list(5:7, "#F3B508")) # 输出: # $region1 # $region1[[1]] # [1] 1 2 3 # # $region1[[2]] # [1] "#E8C506" # # # $region2 # $region2[[1]] # [1] 5 6 7 # # $region2[[2]] # [1] "#F3B508"
无循环高效实现方法
方法1:用Map()函数
Map()是R原生的多列表元素操作函数,会自动按元素名称匹配,把两个列表里同名的元素打包成子列表,完全满足需求:
mylist3 <- Map(list, mylist1, mylist2)
方法2:tidyverse风格的purrr::map2()
如果你常用tidyverse工具包,purrr的map2()函数效果一致,语法更贴合tidyverse风格:
library(purrr) mylist3 <- map2(mylist1, mylist2, list)
方法3:用mapply()函数
mapply()是sapply()的多输入版本,记得设置SIMPLIFY = FALSE,避免结果被自动简化:
mylist3 <- mapply(list, mylist1, mylist2, SIMPLIFY = FALSE)
内容的提问来源于stack exchange,提问作者asd-tm
相关产品推荐
相关产品推荐

