检查一个向量是否是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