r - 保留该列表(在 R 中)内没有适当子集的元素(来自向量列表)

标签 r list vector set

真子集:集合 S 的真子集 S' 是严格包含在 S 中的子集,因此排除 S 本身(注意我也排除了空集)。

假设列表中有以下向量:

a = c(1,2)
b = c(1,3)
c = c(2,4)
d = c(1,2,3,4)
e = c(2,4,5)
f = c(1,2,3)

我的目标是仅保留列表中没有适当子集的向量,在本例中为 a、b 和 c。以下代码是我的解决方案,

possibilities = list(a,b,c,d,e,f)

final.list <- possibilities

for (i in possibilities) {
  for (j in rev(possibilities)) {
    if (all(i %in% j) & !all(j %in% i)) {
      final.list <- final.list[!(final.list %in% list(j))]
    } else {
      final.list <- final.list
    }
  }
}

它给出了预期的输出,尽管我担心这种方法的可扩展性。有人知道更有效的方法吗?谢谢!

* 请注意,出于我的真正目的,可能性列表的长度及其子向量可能会变得相当大。

最佳答案

一个purrr选项可能是:

map2(.x = possibilities,
     .y = seq_along(possibilities),
     ~ !any(map_lgl(possibilities[-.y], function(z) all(z %in% .x))))

[[1]]
[1] TRUE

[[2]]
[1] TRUE

[[3]]
[1] TRUE

[[4]]
[1] FALSE

[[5]]
[1] FALSE

[[6]]
[1] FALSE

仅保留目标向量:

keep(possibilities,
     map2_lgl(.x = possibilities,
              .y = seq_along(possibilities),
              ~ !any(map_lgl(possibilities[-.y], function(z) all(z %in% .x)))))

[[1]]
[1] 1 2

[[2]]
[1] 1 3

[[3]]
[1] 2 4

关于r - 保留该列表(在 R 中)内没有适当子集的元素(来自向量列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64452018/

相关文章:

r - 计算相邻时间点的点间距离,找到 `n`遍历所有时间点的最短路径

c - 如何从 C 中的链表构建霍夫曼树?

c++ - std::vector 异常是中立的吗?

使用电子表格数据在 R 中运行线性模型

r - 忽略(但不删除)dplyr group_by 函数中的 NA

c# - 删除列表的重复项,按 C# 中的属性值选择?

python-3.x - 根据其他列值从数据框列中的列表中删除最后一个元素

c++ - 将 vector 拆分为多个的最有效方法

c - 将矩阵 2D 转换为 1D

r - 在 R 文件中获取文件时 eval(expr, envir, enclos) 出错