r - 查找字符串向量的所有唯一组合的幂集

标签 r list unique combinations powerset

我试图找到长度为 39 的向量/项目列表的所有唯一分组。下面是我的代码:

x <- c("Dominion","progress","scarolina","tampa","tva","TminKTYS",
       "TmaxKTYS","TminKBNA","TmaxKBNA","TminKMEM","TmaxKMEM",
       "TminKCRW","TmaxKCRW","TminKROA","TmaxKROA","TminKCLT",
       "TmaxKCLT","TminKCHS","TmaxKCHS","TminKATL","TmaxKATL",
       "TminKCMH","TmaxKCMH","TminKJAX","TmaxKJAX","TminKLTH",
       "TmaxKLTH","TminKMCO","TmaxKMCO","TminKMIA","TmaxKMIA",
       "TminKPTA","TmaxKTPA","TminKPNS","TmaxKPNS","TminKLEX",
       "TmaxKLEX","TminKSDF","TmaxKSDF")

# Generate a list with the combinations  
zz <- sapply(seq_along(x), function(y) combn(x,y))
# Filter out all the duplicates
sapply(zz, function(z) t(unique(t(z)))) 

但是,该代码导致我的计算机内存不足。有一个更好的方法吗?我意识到我有一个很大的 list 。谢谢。

最佳答案

要计算所有唯一的子集,您只需创建与原始项目集的基数具有相同长度的所有二进制向量。如果有 39 个项目,那么您正在查看长度为 39 的所有二进制向量。每个向量的每个元素标识是或否,该项目是否在相应的子集中。

由于有 39 个项目,每个项目都可以在或不在给定的子集中,因此有 2^39 个可能的子集。排除空集,即全 0 向量,您有 2^39 - 1 个可能的子集。

也就是说,正如@joran 所说,大约有 549B 个向量。鉴于二进制向量最紧凑地表示数据(即没有字符串),那么您将需要 549B * 39 位来返回所有子集。我不认为你想存储这个:大约 2.68E12 个字节。如果您坚持使用这些字符,那么您的容量可能会达到数十 TB。

购买一个可以支持这个的系统当然是可行的,但不是很划算。

在元级别上,正如@JD 所说,这很可能不是您真正需要走的路。我建议发布一个新问题,也许可以在此处或与统计相关的 SE 网站上对其进行改进。

关于r - 查找字符串向量的所有唯一组合的幂集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6959903/

相关文章:

r - 如何比较和组合 R 中的字符串列

css - 列表图标 : TinyMCE removes Font Awesome-Tags

python - Django - 模型字段的动态唯一测试

java - 将 SecureRandom 和 UUID 转换为 int (java)?

python - Pandas 根据现有列的第一个唯一值创建新列

r - 通过 varImp 按重要性提取 20 多个变量

regex - 在特定单词后面的逗号上拆分字符串

r - 更改 Shiny 中的默认错误消息

c# - 我怎样才能以这种方式遍历这个列表?

python - 如何根据 Python 中另一个列表的(子列表)索引对列表进行分区