2011-11-12 15 views
5

No estoy seguro si las permutaciones son la palabra correcta para esto. Quiero dado un conjunto de n vectores (es decir [1,2], [3,4] y [2,3]) a todos permutar y obtener una producción deCombinaciones de vectores múltiples en R

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

¿Hay una operación en I que va a hacer esto?

+0

Creo que eres describiendo combinaciones. Las permutaciones son similares a las combinaciones, pero el orden de los elementos es importante. – Andrie

Respuesta

9

Este es un caso útil para almacenar los vectores en una lista y utilizando do.call() para concertar una llamada a la función apropiada para usted. expand.grid() es la función estándar que desea. Pero por lo que no tiene que escribir a máquina o el nombre de vectores individuales, intente:

> 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 

Sin embargo, para toda mi inteligencia, resulta que expand.grid() acepta una lista:

> 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 
+0

+1 Explosión y condena. Robaste mi respuesta. ;-) – Andrie

+0

@Andrie ¡Qué vergonzoso! Tratar de ser * demasiado * inteligente tiene sus ventajas. Sin embargo, no me merezco el Accept. Voy a hacer las paces con algunos upvotes. –

7

Esto es lo que hace expand.grid.

Citando desde la página de ayuda: Cree un marco de datos de todas las combinaciones de los vectores o factores suministrados. El resultado es data.frame con una fila para cada combinación.

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 
+0

1 explosiva y la condenación, que me golpearon a ella ;-) –

+0

Hola, estoy tratando de este enfoque, pero estoy recibiendo el mensaje: "Error en rep.int (rep.int (seq_len (nx), rep.int (rep.fac, nx)), orep): vector es demasiado grande "¿Hay alguna forma alternativa de hacerlo? – user1375871

+0

@ user1375871 ¿Qué tan grandes son sus vectores? –

Cuestiones relacionadas