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