我将N=4
元素和q=3
元素标识为1
,2
,3
。
我创建矩阵M
,其中包含N=4
个元素的所有向量,2
个元素等于1
,1
元素等于{{ 1}}和2
元素在所有可能的位置等于1
,使用3
如下:
interpc
我想要一种方法,以便不创建行library(iterpc)
I=iterpc(c(2,1,1), labels=c(1,2,3), ordered=TRUE)
M=getall(I)
> M
[,1] [,2] [,3] [,4]
[1,] 1 1 2 3
[2,] 1 1 3 2
[3,] 1 2 1 3
[4,] 1 2 3 1
[5,] 1 3 1 2
[6,] 1 3 2 1
[7,] 2 1 1 3
[8,] 2 1 3 1
[9,] 2 3 1 1
[10,] 3 1 1 2
[11,] 3 1 2 1
[12,] 3 2 1 1
,2
,5
,6
,10
和11
。
这些行与其他行相关联。例如,可以通过排列行12
的元素2
和2
来构造行3
。同样,可以使用行1
构建行5
。
那么,有没有办法构建行3
,1
,3
,4
,7
和8
,但不是行9
,2
,5
,6
,10
和11
?
答案 0 :(得分:4)
听起来你想要对待你的2s和3s等同于排列。这是一个只使用1s和3s进行初始生成的解决方案,然后遍历每一行将前3个更改为2:
library(iterpc)
I=iterpc(c(2,2), labels=c(1,3), ordered=TRUE)
M=getall(I)
t(apply(M, 1, function(x) {x[match(3, x)] = 2; x}))
# [,1] [,2] [,3] [,4]
# [1,] 1 1 2 3
# [2,] 1 2 1 3
# [3,] 1 2 3 1
# [4,] 2 1 1 3
# [5,] 2 1 3 1
# [6,] 2 3 1 1