我试图找到一个向量/项目列表的所有唯一分组,长度为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))))
但是,代码会导致计算机内存不足。有一个更好的方法吗?我意识到我有一个很大的清单。感谢。
答案 0 :(得分:3)
要计算所有唯一子集,您只需创建所有二进制向量,其长度与原始项目集的基数相同。如果有39个项目,那么您将查看长度为39的所有二进制向量。每个向量的每个元素标识,是或否,项目是否在相应的子集中。
由于有39个项目,并且每个项目可以在给定子集中或不在其中,因此存在2 ^ 39个可能的子集。排除空集,即全0矢量,你有2 ^ 39 - 1个可能的子集。
就像@joran所说的那样,大约有549B个向量。假设二进制向量最紧凑地表示数据(即没有字符串),那么您将需要549B * 39位来返回所有子集。我不认为你想存储这个:那是大约2.68E12字节。如果你坚持使用这些字符,你可能会有几十TB的数据。
购买一个可以支持这个系统的系统当然是可行的,但不是很划算。
在元级别,正如@JD所说,这很可能不是你真正需要去的路径。我建议发布一个新问题,也许可以在这里或在统计相关的SE网站上进行改进。
答案 1 :(得分:0)
您可以尝试使用expand.grid。
从提供的矢量的所有组合创建数据框 因素。有关精确的详细信息,请参阅返回值的说明 这样做的方式。