2010-05-21 12 views
2

pour devenir plus précis, voici un exemple:Existe-t-il une fonction expand.grid dans R, renvoyant des permutations?

> 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 

Cette trame de données a été créée à partir de toutes les combinaisons des vecteurs fournis. Je voudrais créer une trame de données similaire de tous les permutations des vecteurs fournis. Remarquez que chaque ligne doit contenir exactement deux fives, mais pas nécessairement la deuxième ligne. Merci.

+0

Je ne comprends pas la question, pourriez-vous montrer à quoi vous voulez que la sortie ressemble? Les permutations agissent généralement sur des ensembles, pas sur des ensembles de séries, donc je ne suis pas sûr de ce que la fonction devrait faire. –

+0

@Ken Williams, Pour donner un autre exemple, en dehors de la paire 5,5,1,2 et 5,5,2,1 je voudrais aussi dans le jeu de résultats 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 et 2,1,5,5. Si j'ai raison, la dimension de la structure de données qui en résulte doit être: [150,4] – Brani

Répondre

2

Le code ci-dessous fonctionne. (repose sur des permutations de 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)) 
+0

Excellent! Je trouve étrange qu'il n'y ait pas une telle fonction intégrée – Brani

+0

Pourquoi devrait-il être intégré? Quel est le problème d'avoir cela dans un paquet externe? – Dason

0

Essayez ?allPerms dans le package vegan.