在R语言中如何将列表元素分别追加到嵌套列表的对应子列表
解决R语言嵌套列表对应追加元素的问题
你的核心问题是需要将l2的每个元素分别对应追加到l1的每个子列表中,而不是把整个l2追加到每个子列表里。原来的lapply只遍历了l1,每次都传入完整的l2,所以会把g和h都加到每个子列表里,这和预期不符。
可以用mapply(或者它的简化版Map)来实现,因为这两个函数支持同时遍历多个列表的对应元素:
l1 <- list(list("a", "b", "c"), list("d", "e", "f")) l2 <- list("g", "h") # 使用mapply实现对应追加 l3 <- mapply(function(x, y) append(x, y), l1, l2, SIMPLIFY = FALSE) # 查看结果 l3
运行后得到的结果就是你想要的:
> l3 [[1]] [[1]][[1]] [1] "a" [[1]][[2]] [1] "b" [[1]][[3]] [1] "c" [[1]][[4]] [1] "g" [[2]] [[2]][[1]] [1] "d" [[2]][[2]] [1] "e" [[2]][[3]] [1] "f" [[2]][[4]] [1] "h"
关键说明:
mapply会同时取l1的第i个子列表和l2的第i个元素,传给自定义函数进行追加操作SIMPLIFY = FALSE必须加上,否则mapply会把结果自动简化成矩阵或向量,破坏原有的列表结构- 你也可以用
Map函数,它是mapply的简化版,默认SIMPLIFY = FALSE,代码更简洁:l3 <- Map(append, l1, l2)
内容的提问来源于stack exchange,提问作者Melierax
相关产品推荐
相关产品推荐

