如何根据另一嵌套列表的值为R语言嵌套列表的子列表元素命名?
问题描述
现有两个层级结构完全一致的嵌套列表:
list1 <- list(list("a", "b"), list("c", "d")) list2 <- list(list("e", "f"), list("g", "h"))
需要将list2中的值作为list1对应子列表元素的名称,最终得到等价于以下代码的结果:
list1 <- list(list(e = "a", f = "b"), list(g = "c", h = "d"))
要求实现自动赋值,无需手动逐个设置名称。
解决方案
方法1:使用purrr包的map2函数
借助purrr包的map2可以同时遍历两个结构匹配的列表,对对应位置的子列表执行命名操作:
library(purrr) list1_named <- map2(list1, list2, function(sub1, sub2) { names(sub1) <- sub2 sub1 })
方法2:基础R的mapply函数
如果不想加载额外包,用基础R的mapply也能实现相同效果,注意要设置SIMPLIFY = FALSE避免结果被自动简化:
list1_named <- mapply(function(sub1, sub2) { names(sub1) <- sub2 sub1 }, list1, list2, SIMPLIFY = FALSE)
方法3:手动循环(直观理解逻辑)
如果想更清晰地看到每一步的处理过程,可以用循环逐个操作子列表:
list1_named <- list1 for (i in seq_along(list1_named)) { names(list1_named[[i]]) <- list2[[i]] }
验证结果
用str()函数查看结果结构,确认是否符合预期:
str(list1_named) # List of 2 # $ :List of 2 # ..$ e: chr "a" # ..$ f: chr "b" # $ :List of 2 # ..$ g: chr "c" # ..$ h: chr "d"
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

