Комбинации нескольких векторов в R - PullRequest
6 голосов
/ 13 ноября 2011

Я не уверен, что перестановки - правильное слово для этого.Я хочу дать набор из n векторов (т.е. [1,2], [3,4] и [2,3]) переставить их все и получить вывод

[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc.

Есть ли в R операция, которая сделает это

Ответы [ 2 ]

12 голосов
/ 13 ноября 2011

Это полезный случай для сохранения векторов в списке и использования do.call() для организации соответствующего вызова функции для вас.expand.grid() - это стандартная функция, которую вы хотите.Но чтобы вам не приходилось набирать или называть отдельные векторы, попробуйте:

> l <- list(a = 1:2, b = 3:4, c = 2:3)
> do.call(expand.grid, l)
  a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3

Однако, при всей моей смекалке получается, что expand.grid() принимает список:

> expand.grid(l)
  a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3
8 голосов
/ 13 ноября 2011

Это то, что делает expand.grid.

Цитирование на странице справки: Создание кадра данных из всех комбинаций предоставленных векторов или факторов . В результате получается data.frame со строкой для каждой комбинации.

expand.grid(
    c(1, 2),
    c(3, 4),
    c(2, 3)
)

  Var1 Var2 Var3
1    1    3    2
2    2    3    2
3    1    4    2
4    2    4    2
5    1    3    3
6    2    3    3
7    1    4    3
8    2    4    3
...