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

如何从R语言嵌套列表的每个子列表中保留指定值?

R语言嵌套列表保留指定元素的正确方法

问题背景

我有一个R语言的嵌套列表,定义如下:

nested.list <- list(c(46270L, 103154L, 159944L, 193405L, 199925L), c(24049L, 
  30454L, 55710L, 106407L, 122059L, 174131L), c(14520L, 46270L, 
  153636L, 188626L, 199925L), c(8150L, 24049L, 27321L, 30461L, 
  33513L, 55710L, 58933L, 71342L, 103154L, 122059L, 159920L, 169516L, 
  174131L), c(19195L, 71333L, 122059L, 137645L, 153636L, 183740L, 
  195065L, 199925L), c(14520L, 60368L, 80939L, 82381L, 95070L, 
  103172L, 106379L, 147215L, 166353L, 199925L), c(30461L, 68324L, 
  75981L, 77674L, 106407L, 120284L), c(24029L, 72751L, 103154L, 
  120284L, 142359L))

希望在每个子列表中仅保留以下数值:

target.values <- c(24029, 33513, 60368, 106407, 147215, 153636, 159920, 193405)

我尝试用purrr::keep(.x = nested.list, .p = function(x){all(x %in% target.values)}),但没得到预期结果,请问正确的实现方法是什么?

问题原因

你使用的purrr::keep是筛选整个子列表,只有当子列表的所有元素都属于target.values时才会保留该子列表,这和你“在每个子列表内保留符合条件的元素”的需求完全不符。

正确解法

方法1:使用purrr包实现

通过purrr::map遍历每个子列表,对每个子列表做逻辑筛选,只保留属于target.values的元素:

library(purrr)
result <- map(nested.list, ~ .x[.x %in% target.values])

方法2:基础R实现(无需额外包)

用lapply遍历嵌套列表,配合逻辑索引完成筛选:

result <- lapply(nested.list, function(x) x[x %in% target.values])

结果验证

运行上述代码后,result的每个子列表仅包含target.values中的元素:

> result
[[1]]
[1] 193405

[[2]]
[1] 106407

[[3]]
[1] 153636

[[4]]
[1]  33513 159920

[[5]]
[1] 153636

[[6]]
[1]  60368 147215

[[7]]
[1] 106407

[[8]]
[1] 24029

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:53:23