从列表中删除某些向量

时间:2017-03-24 18:20:01

标签: r

我想从列表中删除某些向量。我有这样的例子:

a<-c(1,2,5)
b<-c(1,1,1)
c<-c(1,2,3,4)
d<-c(1,2,3,4,5)
exampleList<-list(a,b,c,d)

exampleList returns of course:
[[1]]
[1] 1 2 5

[[2]]
[1] 1 1 1

[[3]]
[1] 1 2 3 4

[[4]]
[1] 1 2 3 4 5

有没有办法从R中的列表中删除某些向量。我想删除列表exampleList中包含1和5的所有向量(因此不仅包含1或5的向量,而且两者都包含)。提前谢谢!

3 个答案:

答案 0 :(得分:4)

使用Filter

filteredList <- Filter(function(v) !(1 %in% v & 5 %in% v), exampleList)
print(filteredList)
#> [[1]]
#> [1] 1 1 1
#> 
#> [[2]]
#> [1] 1 2 3 4

Filter使用功能样式。您传递的第一个参数是一个函数,它为您要保留的元素返回TRUE,而FALSE表示您想要删除的元素< / em>从列表中。第二个参数只是列表本身。

答案 1 :(得分:4)

我们可以在每个列表元素上使用sapply,并删除存在值1和5的元素。

exampleList[!sapply(exampleList, function(x) any(x == 1) & any(x == 5))]

#[[1]]
#[1] 1 1 1

#[[2]]
#[1] 1 2 3 4

答案 2 :(得分:3)

这是一个包含两个步骤的解决方案:

exampleList<-list(a=c(1,2,5), b=c(1,1,1), c=c(1,2,3,4), d=c(1,2,3,4,5))
L <- lapply(exampleList, function(x) if (!all(c(1,5) %in% x)) x)
L[!sapply(L, is.null)]
# $b
# [1] 1 1 1
# 
# $c
# [1] 1 2 3 4

这是一个没有任何新功能定义的一步式变体

exampleList[!apply(sapply(exampleList, '%in%', x=c(1,5)), 2, all)]

(...但它有两次调用apply-functions)