我想从列表中删除某些向量。我有这样的例子:
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的向量,而且两者都包含)。提前谢谢!
答案 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)