如何重构R中的组合生成器?
我需要所有可能的数字组合,从1到79,每次最多15个。我有下面的代码如何重构R中的组合生成器?,r,refactoring,combinations,R,Refactoring,Combinations,我需要所有可能的数字组合,从1到79,每次最多15个。我有下面的代码 dets <- 1:79 all.subsets <- dets for (i in 2:15) { all.subsets <- c(all.subsets, combn(x=dets, m=i, simplify=FALSE)) } 我想听听其他更好的方法 如果我正确理解了您想要的内容,那么列表中将包含sum(选择(79,1:15))元素,即6.961719e+15。您知道这样一个列表的大小
dets <- 1:79
all.subsets <- dets
for (i in 2:15) {
all.subsets <- c(all.subsets, combn(x=dets, m=i, simplify=FALSE))
}
我想听听其他更好的方法 如果我正确理解了您想要的内容,那么列表中将包含
sum(选择(79,1:15))
元素,即6.961719e+15。您知道这样一个列表的大小(以GB为单位)吗?是的,您理解正确。我不确定它的大小,但我想它非常大,我需要它来完成我的任务!因此,找到实现这一点的最佳方法。运行i=1:4的代码将创建一个100Mb大小的1584740个元素的对象。这意味着6.961719e+15个元素的总容量大约为4亿GB。我真的不明白你是怎么让它在你的编辑器中工作的。我用同样的方法尝试了I=1:4,得到了一个96.7MB大小的1584740个元素的对象。我没有尝试I=1:15,而是建议用另一种方法来做这项工作,而不是循环。但是尺寸问题仍然存在!让我重新表述一下我的发言,以澄清歧义。我不确定我是否理解这个问题。如果一次最多需要5个,为什么要迭代到m=15?。此外,您确定需要所有组合的显式表示吗?根据您的需要,可能会有更高效的表示。你打算如何使用这个列表?
all.subsets <- lapply(1:15, combn, x = dets, simplify = FALSE)
lengths(all.subsets)