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

如何在R语言多层嵌套列表中保留第一层列表元素

解决多层嵌套列表仅保留第一层非嵌套元素的问题

错误原因分析

你之前的代码逻辑有误:map_depth(my_list, 1, ~ keep(.x, vec_depth(.x) > 1)) 里,map_depth(1) 会把第一层的每个元素单独传给keep,但keep是用来筛选整个集合的工具,不是处理单个元素的,这就导致了长度不匹配的报错。

正确解决方案

我们不需要用map_depth,直接对整个列表做筛选即可,有两种简洁的方式:

方法1:用purrr::keep保留深度为1的元素

vec_depth(.x) == 1 可以精准识别第一层的非嵌套元素(非列表类型的深度都是1,嵌套列表的深度≥2):

library(purrr)

my_list <-
  list(
    a.1 = "some text",
    b.1 = NA,
    c.1 = integer(0),
    d.1 = "some text",
    e.1 = list(a.2 = "some text", b.2 = "a2"),
    f.1 = list(c.2 = "some text", d.2 = integer(10), e.2 = list(a.3 = "some deep text"))
  )

my_list2 <- keep(my_list, ~ vec_depth(.x) == 1)

方法2:用purrr::discard移除所有列表元素

如果你的需求就是去掉所有嵌套的列表项,直接判断元素是否为列表类型更直观:

my_list2 <- discard(my_list, is.list)

验证结果

运行上述代码后,my_list2的结构和你期望的完全一致:

my_list2
#> $a.1
#> [1] "some text"
#> 
#> $b.1
#> [1] NA
#> 
#> $c.1
#> integer(0)
#> 
#> $d.1
#> [1] "some text"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:30:53