使用R的分区和置换

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

我正在尝试使用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次后每侧出现次数的所有可能结果。

r combinations permutation combinatorics partition
1个回答
0
投票

您正在使用的程序包中有一个功能(即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
© www.soinside.com 2019 - 2024. All rights reserved.