二进制向量的可能排列,保持和在R中固定

时间:2014-12-19 03:16:09

标签: r matrix statistics combinations permutation

假设我们对维度 3 x N 的矩阵(比如 MAT )有固定的行和,其中(即行和)是= (RS ,LS,NCS)' N 列向量未知。每个 N 列向量有3种可能的选择 - (1,0,0)',(0,1,0)',(0,0,1) )'

所以第一个问题是 -

如何通过使用R软件将行总和固定为(RS,LS,NCS)' 来如何获得此矩阵 MAT 的所有可能选择?

例如 - 取 N = 7, RS =第一行的总和= 2, LS =第二行的总和= 2和 NCS =第三行的总和= 3。所以(1,0,0)'会出现两次,(0,1,0)'也将出现两次和(0,0,1)'将在该矩阵 MAT N 列中出现三次。 MAT 的一种可能选择是 -

1 0 0 0 0 1 0

0 1 0 0 0 0 1

0 0 1 1 1 0 0

我认为通过将行和固定为(2,2,3)'将会有7个/!(2!x2!x3!)= 210个可能的 MAT 选项。

但是如何使用R软件获得 MAT 的可能选择?它应该是一个3xNxn维数组,其中 n MAT 的可能选择数。

第二个问题是 -

如果矩阵 MAT 的每个 N 列向量的可能选择变为 - (1,1,0),解决方案机制如何在上述问题中发生变化',(1,0,0)',(0,1,0)',(0,0,1)' ?

1 个答案:

答案 0 :(得分:1)

您可以使用iterpc包。

library(iterpc)

foo = function(index){
    sapply(index, function(z){as.numeric(c(z==1,z==2,z==3))})
}

获取所有可能的矩阵

I = iterpc(c(2,2,3), ordered=TRUE)
M = getall(I)
sapply(1:nrow(M), function(i) foo(M[i,]), simplify=FALSE)

逐一获取矩阵

I = iterpc(c(2,2,3), ordered=TRUE)
foo(getnext(I))
foo(getnext(I))
foo(getnext(I))