检查一个向量是否是R中另一个向量的超集
我有以下向量列表:检查一个向量是否是R中另一个向量的超集,r,list,vector,comparison,subset,R,List,Vector,Comparison,Subset,我有以下向量列表: a <- c(1,2,4,5,6,7,8,9) b <- c(1,2,4,5) c <- c(1,2,3,10,11,12,13,14) d <- c(1,2,3,10,15,16,17,18,19) e <- c(1,2,3,10,15,16) f <- list(a,b,c,d,e) 然而,我真正想要的是对列表进行子集,使其仅包含那些不是列表中其他向量的超集的向量——即,所需的输出应如下所示: [[1]] [1] 1 2 4 5 [
a <- c(1,2,4,5,6,7,8,9)
b <- c(1,2,4,5)
c <- c(1,2,3,10,11,12,13,14)
d <- c(1,2,3,10,15,16,17,18,19)
e <- c(1,2,3,10,15,16)
f <- list(a,b,c,d,e)
然而,我真正想要的是对列表进行子集,使其仅包含那些不是列表中其他向量的超集的向量——即,所需的输出应如下所示:
[[1]]
[1] 1 2 4 5
[[2]]
[1] 1 2 3 10 11 12 13 14
[[3]]
[1] 1 2 3 10 15 16
如何在R中做到这一点?在下面的代码片段中,我使用%中的
%将列表中的每个向量与其他向量进行比较。如果每个比较向量的和不止一次变为非零,那么该向量就是另一个向量的超集。请注意,我们期望一个比较能够精确匹配,即向量与自身的比较
out <- sapply(f, function(x) {
res <- lapply(f, function(y) {
return(sum(!(y %in% x)))
})
return(sum(res > 0) == length(res) - 1)
})
f[out]
[[1]]
[1] 1 2 4 5
[[2]]
[1] 1 2 3 10 11 12 13 14
[[3]]
[1] 1 2 3 10 15 16
out不是所需输出的第一个对象(b)是前一个向量(a)的子向量吗?。根据我从你的解释中得到的,你得到了正确的答案。如果(b)是(a)的子向量,则输出应包括(b),同时排除(a)。很抱歉不清楚这一点!
[[1]]
[1] 1 2 4 5
[[2]]
[1] 1 2 3 10 11 12 13 14
[[3]]
[1] 1 2 3 10 15 16
out <- sapply(f, function(x) {
res <- lapply(f, function(y) {
return(sum(!(y %in% x)))
})
return(sum(res > 0) == length(res) - 1)
})
f[out]
[[1]]
[1] 1 2 4 5
[[2]]
[1] 1 2 3 10 11 12 13 14
[[3]]
[1] 1 2 3 10 15 16