R根据另一个索引列表删除列表的一部分

R remove parts of a list based on another list of indices

我有一个列表,其中每个元素都是一个向量 ("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

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

一个选项可以是:

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