如何从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.
相关产品推荐
相关产品推荐

