You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中按列表名称合并嵌套列表

合并嵌套列表:按外层同名对象合并

问题描述

现有多个嵌套列表,它们的外层都包含相同名称的子列表(如layer_1、layer_2),需要将这些列表按外层名称合并,把对应层下的子元素整合到同一个列表中。示例输入如下:

# List object 1
list_1 <- list(
  L1 <- list(
    A1 <- c(1, 2, 3)
  ),
  L2 <- list(
    A1 <- c(1, 2, 3)
))

names(list_1) <- c("layer_1", "layer_2")
names(list_1$layer_1) <- c("A1")
names(list_1$layer_2) <- c("A1")


# List object 2
list_2 <- list(
  L1 <- list(
    B1 <- c(4, 5, 6)
  ),
  L2 <- list(
    B1 <- c(4, 5, 6)
  ))

names(list_2) <- c("layer_1", "layer_2")
names(list_2$layer_1) <- c("B1")
names(list_2$layer_2) <- c("B1")

# 待合并的大列表,可扩展包含list_3、list_4等
list_1_2 <- list(list_1, list_2)

期望输出结构:将所有子列表中layer_1的子元素合并,layer_2同理,最终得到每个外层列表下包含所有对应子元素的结构:

$layer_1
$layer_1$A1
[1] 1 2 3

$layer_1$B1
[1] 4 5 6


$layer_2
$layer_2$A1
[1] 1 2 3

$layer_2$B1
[1] 4 5 6

解决方案

方法1:Base R实现

无需额外包,通过循环和基础函数完成合并:

# 定义所有需要合并的外层名称(可根据需求添加layer_3等)
target_layers <- c("layer_1", "layer_2")

# 初始化结果列表
merged_list <- list()

# 遍历每个外层名称,合并所有子列表中对应层的内容
for(layer in target_layers) {
  # 提取每个子列表中当前层的元素,合并为一个列表
  merged_layer <- do.call(c, lapply(list_1_2, function(x) x[[layer]]))
  merged_list[[layer]] <- merged_layer
}

# 查看合并结果
merged_list

方法2:使用purrr包(简洁版)

如果使用tidyverse生态,purrr的函数可以让代码更简洁:

library(purrr)

# 定义目标外层名称
target_layers <- c("layer_1", "layer_2")

# 按层合并:先提取每个层的所有子元素,再合并为一个列表
merged_list <- map(target_layers, ~do.call(c, map(list_1_2, pluck, .x))) %>%
  set_names(target_layers)

# 查看结果
merged_list

扩展说明

  • 若需要合并更多子列表(如list_3、list_4),只需将它们加入list_1_2这个大列表即可。
  • 若外层包含layer_3,只需在target_layers中添加该名称,代码会自动合并对应层的内容。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:07:29