Я не уверен, что перестановки - правильное слово для этого.Я хочу дать набор из n векторов (т.е. [1,2], [3,4] и [2,3]) переставить их все и получить вывод
[1,2]
[3,4]
[2,3]
[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc.
Есть ли в R операция, которая сделает это
Это полезный случай для сохранения векторов в списке и использования do.call() для организации соответствующего вызова функции для вас.expand.grid() - это стандартная функция, которую вы хотите.Но чтобы вам не приходилось набирать или называть отдельные векторы, попробуйте:
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
Это то, что делает expand.grid.
expand.grid
Цитирование на странице справки: Создание кадра данных из всех комбинаций предоставленных векторов или факторов . В результате получается data.frame со строкой для каждой комбинации.
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