Есть ли в R функция, похожая на expand.grid, возвращающая перестановки?

чтобы быть более конкретным, вот пример:

> expand.grid(5, 5, c(1:4,6),c(1:4,6))
   Var1 Var2 Var3 Var4
1     5    5    1    1
2     5    5    2    1
3     5    5    3    1
4     5    5    4    1
5     5    5    6    1
6     5    5    1    2
7     5    5    2    2
8     5    5    3    2
9     5    5    4    2
10    5    5    6    2
11    5    5    1    3
12    5    5    2    3
13    5    5    3    3
14    5    5    4    3
15    5    5    6    3
16    5    5    1    4
17    5    5    2    4
18    5    5    3    4
19    5    5    4    4
20    5    5    6    4
21    5    5    1    6
22    5    5    2    6
23    5    5    3    6
24    5    5    4    6
25    5    5    6    6

Этот фрейм данных был создан из всех комбинаций предоставленных векторов. Я хотел бы создать аналогичный фрейм данных из всех permutations предоставленных векторов. Обратите внимание, что каждая строка должна содержать ровно 2 пятерки, но не обязательно первые две в ряду. Спасибо.


person Brani    schedule 21.05.2010    source источник
comment
Я не понимаю вопроса, не могли бы вы показать, как вы хотите, чтобы результат выглядел? Перестановки обычно действуют на наборы, а не на наборы наборов, поэтому я не уверен, что должна делать функция.   -  person Ken Williams    schedule 21.05.2010
comment
@ Кен Уильямс, чтобы привести еще один пример, помимо пары 5,5,1,2 и 5,5,2,1, я также хотел бы получить в наборе результатов 5,1,5,2 - 5,2,5,1 - 5,1,2,5 - 5,2,1,5 - 1,5,2,5 - 2,5,1,5 - 1,5,5,2 - 2,5,5,1 - 1 ,2,5,5 и 2,1,5,5. Если я прав, размер результирующего фрейма данных должен быть: [150,4]   -  person Brani    schedule 22.05.2010


Ответы (2)


Код ниже работает. (зависит от перестановок из gtools)

comb <- t(as.matrix(expand.grid(5, 5, c(1:4,6),c(1:4,6))))
perms <- t(permutations(4,4))
ans <- apply(comb,2,function(x) x[perms])
ans <- unique(matrix(as.vector(ans), ncol = 4, byrow = TRUE))
person John    schedule 22.05.2010
comment
Превосходно! Мне кажется странным, что нет такой встроенной функции - person Brani; 22.05.2010
comment
Почему он должен быть встроен? Что плохого в том, чтобы иметь это во внешнем пакете? - person Dason; 21.05.2012

Попробуйте ?allPerms в пакете vegan.

person Richie Cotton    schedule 21.05.2010