R语言如何对嵌套列表内的子列表矩阵执行rbind合并
R语言多层嵌套列表内矩阵合并方案
你要的效果可以通过lapply嵌套do.call直接实现,核心代码如下:
# 遍历主列表的每个子列表,对每个子列表内的矩阵执行rbind合并 result <- lapply(mainlist, function(sublist) { do.call(rbind, sublist) })
原理解释
lapply会遍历mainlist中的每一个子列表,每次迭代将当前子列表传入匿名函数的sublist参数do.call的作用是将传入的列表(也就是当前子列表)拆分为多个独立参数,传递给第一个参数指定的函数rbind,等效于手动写rbind(sublist[[1]], sublist[[2]]),完美解决直接写rbind(sublist)无法合并的问题- 最终返回的
result是和mainlist长度相同的列表,每个元素就是对应子列表合并完成的矩阵,不会把所有子列表的结果合并为一个大矩阵,完全符合你的需求。
可选写法(使用purrr包)
如果你习惯用tidyverse生态的purrr包,也可以用map实现,写法更简洁:
library(purrr) # 写法1:搭配do.call result <- map(mainlist, ~ do.call(rbind, .x)) # 写法2:搭配reduce函数 result <- map(mainlist, ~ reduce(.x, rbind))
内容的提问来源于stack exchange,提问作者MEKS
相关产品推荐
相关产品推荐

