我正在尝试使用R将M的所有可能分区(包括0)划分为N个部分。然后,我希望对每个结果进行置换,而不进行替换和重复。
例如,对于M = 4和N = 2,我想获得:
[1,] 4 3 2 0 1
[2,] 0 1 2 4 3
现在,我可以得到:
[1,] 4 3 2
[2,] 0 1 2
使用partitions::restrictedparts(4, 2, include.zero=TRUE)
。我应该如何继续?
为了给这个问题提供一些背景知识,我实际上是在尝试寻找将骰子滚动60次后每侧出现次数的所有可能结果。
您正在使用的程序包中有一个功能(即partitions
)可以满足您的需求。它被适当地称为compositions
(有关更多信息,请参见Composition (combinatorics)。)>
partitions::compositions(4, 2) [1,] 4 3 2 1 0 [2,] 0 1 2 3 4
现在,为解决您的实际问题,我们有:
myParts <- partitions::compositions(60, 6) ## Note that include.zero is TRUE by default dim(myParts) [1] 6 8259888
这是输出:
transMat <- t(as.matrix(myParts))
head(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 60 0 0 0 0 0
[2,] 59 1 0 0 0 0
[3,] 58 2 0 0 0 0
[4,] 57 3 0 0 0 0
[5,] 56 4 0 0 0 0
[6,] 55 5 0 0 0 0
tail(transMat)
[,1] [,2] [,3] [,4] [,5] [,6]
[8259883,] 1 0 0 0 0 59
[8259884,] 0 1 0 0 0 59
[8259885,] 0 0 1 0 0 59
[8259886,] 0 0 0 1 0 59
[8259887,] 0 0 0 0 1 59
[8259888,] 0 0 0 0 0 60