查找总共6的6个数字的所有组合的列表

问题描述 投票:2回答:1

因此,我已经看到过类似的版本,之前曾问过这个问题(Getting all combinations which sum up to 100 using R),但我一直在努力寻找一种方法来弄清楚我需要具体运行的内容。我正在尝试在R中创建一个包含6个数字的所有不同组合的列表,这些组合加起来为10。但是,我想在行中包括0和重复的相同#。所以看起来像这样:

10 0 0 0 0 0 9 1 0 0 0 0 8 2 0 0 0 0 我试过运行以下命令:

C = t(restrictedparts(10,6, include.zero=TRUE))
ComboSet<-data.frame(do.call(rbind, lapply(1:nrow(C),function(i) getall(iterpc(table(C[i,]), order=T)))))

但是,当我执行此操作时,似乎不包括其中包含0的变体。我尝试将include.zero = TRUE函数输入到我正在运行的内容的不同部分,但到目前为止我还没有运气。有什么建议么?

r combinations permutation integer-partition iterpc
1个回答
0
投票

这是一个好问题,答案不是很明显。

这里有很多事情要解决。对于初学者,请确保您包括您在示例中使用的库。我从经验中知道您正在使用partitionsiterpc。从partitions文档中,我们看到有一个函数可以完全返回您要查找的内容,而无需任何其他步骤。 compositions函数生成Integer Compositions

myComps <- t(as.matrix(compositions(10, 6)))
head(myComps)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10    0    0    0    0    0
[2,]    9    1    0    0    0    0
[3,]    8    2    0    0    0    0
[4,]    7    3    0    0    0    0
[5,]    6    4    0    0    0    0
[6,]    5    5    0    0    0    0

dim(myComps)
[1] 3003    6

all(rowSums(myComps) == 10)
[1] TRUE

关于固定您的实际代码,我不确定为什么您的代码无法按原样工作。我过去曾经使用过iterpc,并且还记得明确地使用过同样的方法。无论如何,解决方法是像labels参数那样显式声明参数,以便使用每个元素的频率而不是值本身。

## The 1's should be 0's and the 2's should be 10's
ComboSet[1:6, ]
X1 X2 X3 X4 X5 X6
1  1  1  1  1  1  2
2  1  1  1  1  2  1
3  1  1  1  2  1  1
4  1  1  2  1  1  1
5  1  2  1  1  1  1
6  2  1  1  1  1  1

## OP's original code
ComboSet<-data.frame(do.call(rbind, lapply(1:nrow(C),function(i) getall(iterpc(table(C[i,]), order=T)))))

all(rowSums(ComboSet) == 10)
[1] FALSE

table(rowSums(ComboSet))

7   8   9  10  11  12  13  14  15  16 
12  30 150 255 186 690 420 420 180 660

## Here is the fix with labels explicitly declared
ComboSetFix <- data.frame(do.call(rbind, lapply(1:nrow(C), function(i) {
    getall(iterpc(table(C[i,]), labels = as.integer(names(table(C[i,]))), order=T))
})))

all(rowSums(ComboSetFix) == 10)
[1] TRUE

dim(ComboSetFix)
[1] 3003    6

您应该知道iterpc已被arrangements取代(它不再在CRAN上)。它具有不同的界面,因此您不能简单地将“ iterpc”一词替换为“ arrangements”。

© www.soinside.com 2019 - 2024. All rights reserved.