【问题标题】:Checking if a group of vectors contain any subsets of one another as fast as possible尽可能快地检查一组向量是否包含彼此的任何子集
【发布时间】:2019-04-05 07:43:54
【问题描述】:

我的代码有效,但我使用的是嵌套的 for 循环,这不是最好的方法。有没有更快的方法来检查向量列表是否包含其他向量的子集?例如,我有一个名为“a”的向量列表,其中包含任意数量的向量:

a = list()
a[[1]] = c(1, 2)
a[[2]] = c(2, 3, 5)
a[[3]] = c(1, 2, 4, 6)
a[[4]] = c(9, 4)

我想检查 a[[n]] 是否是列表中任何其他向量的子集。因此,在我的示例中,只有 a[[1]] 是 a[[3]] 的子集,这是我的代码。

for (i in 1:length(a)) {
  for (j in 1:length(a)) {
    if(all(a[[i]] %in% a[[j]]) && i != j) {
        #do stuff...
    }
  }
}

本质上它是在询问列表是否包含重复的向量。谢谢你的帮助。

【问题讨论】:

    标签: r vector duplicates subset


    【解决方案1】:

    这样做的一种方法是使用双精度sapply。我不确定这有多有效,因为它或多或少也是双循环,只是代码更少。

    sapply(seq_along(a), function(x) any(sapply(a[-x], 
                                        function(y) all(a[[x]] %in% y))))
    
    #[1]  TRUE FALSE FALSE FALSE
    

    它遵循与您相同的逻辑。循环遍历每个列表元素并搜索它是否是任何其他列表元素的子集。它返回指示它是否是子集的逻辑向量。

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多