【问题标题】:R remove parts of a list based on another list of indicesR根据另一个索引列表删除列表的一部分
【发布时间】:2021-06-03 04:44:15
【问题描述】:

我有一个列表,其中每个元素都是一个向量 ("l1") 和另一个列表,其中每个元素包含我要删除的 l1 的相应索引。用这个例子最容易描述

# create some lists in a structure like mine
set.seed(2021)
l1 <- list()
list_indices_to_remove <- list()
for(i in 1:3){
  l1[[i]] <- rbinom(4, 10, .6)
  list_indices_to_remove[[i]] <- sample(1:4, sample(1:2, 1))
}

l1 看起来像这样

[[1]]
[1] 7 5 6 7

[[2]]
[1] 5 6 6 6

[[3]]
[1] 7 6 4 3

对于每个元素,我想从向量中删除list_indices_to_remove中的那些索引

[[1]]
[1] 2 3

[[2]]
[1] 4

[[3]]
[1] 1 2

用一句话来说:我想删除l1[[1]]中向量的第二个和第三个元素,l1[[2]]中的第四个元素,...我可以循环执行此操作,但我需要这样做很多次,我希望能找到更快的解决方案。

我已经尝试了一些东西,这是一个

l1[which(l1 %in% list_indices_to_remove)] <- NULL

但这不会改变列表。提前谢谢你。

【问题讨论】:

    标签: r list indices


    【解决方案1】:

    一个选项可能是:

    Map(function(x, y) x[!seq_along(x) %in% y], l1, list_indices_to_remove)
    

    【讨论】:

    • 谢谢!这是有效和快速的!我过去没怎么用过Map,通常是lapply,但这很棒。
    猜你喜欢
    • 2023-02-23
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2015-09-20
    • 2021-11-25
    • 2013-10-05
    相关资源
    最近更新 更多