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

R语言使用purrr::flatten扁平化列表时保留层级命名的方法

解决方案

基于purrr的实现

核心用imap()同时获取上层分组名和对应值向量,按长度分支处理后扁平化即可:

library(purrr)

result <- imap(test_list, \(vec, grp_nm) {
  if (length(vec) > 1) {
    imap(vec, ~ set_names(list(.x), .y) |> set_names(paste(grp_nm, .y, sep = " - ")))
  } else {
    set_names(list(vec), grp_nm)
  }
}) |> flatten()

# 验证结果
identical(result, want_list)
#> [1] TRUE

纯base R实现

如果不想依赖第三方包,用基础循环也能实现相同逻辑,适配性同样很强:

result <- list()
for (grp_nm in names(test_list)) {
  cur_vec <- test_list[[grp_nm]]
  if (length(cur_vec) > 1) {
    for (sub_nm in names(cur_vec)) {
      new_nm <- paste(grp_nm, sub_nm, sep = " - ")
      result[[new_nm]] <- cur_vec[sub_nm]
    }
  } else {
    result[[grp_nm]] <- cur_vec
  }
}

逻辑说明

两种实现都遵循相同的处理规则:

  • 遍历上层列表,同步拿到上层分组名和对应的子向量
  • 仅当子向量长度>1时,拼接上层分组名和子元素名作为新的列表元素名
  • 子向量长度=1时直接保留原上层分组名
  • 所有处理后的子项最终合并为单层列表,支持任意长度的上层元素扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:27:04