我正在尝试使用 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
)中有一个可用的函数,它可以完成您正在寻找的任务。它被恰本地称为组合
(有关更多信息,请参阅 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
关于r - 使用 R 进行分区和排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60364006/