Перестановки и комбинации в R - PullRequest
0 голосов
/ 07 июня 2018

У меня есть N=4 элементы и q=3 элементы, обозначенные 1, 2, 3.

Я создаю матрицу M, которая содержит все векторы N=4 элементы с 2 элементами, равными 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 и 12?

1 Ответ

0 голосов
/ 07 июня 2018

Звучит так, будто вы хотите относиться к своим 2 и 3 одинаково для перестановок.Вот решение, которое просто использует 1 и 3 для первоначальной генерации, а затем проходит через каждую строку, заменяя первые 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
...