4

我正在尝试查找向量/项目列表的所有唯一分组,长度为 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)))) 

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

4

2 回答 2

3

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

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

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

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

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

于 2011-08-05T19:24:36.063 回答
0

您可以尝试使用expand.grid

从提供的向量或因子的所有组合创建一个数据框。有关此操作的详细信息,请参阅返回值的描述。

于 2011-08-05T17:19:49.333 回答