2011-10-26 20 views
9

El fondo: tengo una función que toma algunos parámetros. Quiero tener el resultado de la función para todas las combinaciones de parámetros posibles.En R, ¿cómo obtengo todas las combinaciones posibles de los valores de algunos vectores?

Un ejemplo simplificado:

f <- function(x, y) { return paste(x, y, sep=",")} 
colors = c("red", "green", "blue") 
days = c("Monday", "Tuesday") 

Quiero mi resultado se vea como

 color day   f  
[1,] "red" "Monday" "red,Monday" 
[2,] "red" "Tuesday" "red,Tuesday" 
[3,] "green" "Monday" "green,Monday" 
[4,] "green" "Tuesday" "green,Tuesday" 
[5,] "blue" "Monday" "blue,Monday" 
[6,] "blue" "Tuesday" "blue,Tuesday" 

Mi idea es crear una matriz con las columnas color y day, llenarlo utilizando los vectores existentes colors y days, inicialice una columna vacía para los resultados, luego use un ciclo para llamar a f una vez por fila de matriz y escriba el resultado en la última columna. Pero no sé cómo generar fácilmente la matriz del vector colors y days. Intenté buscarlo, pero todos los resultados que obtuve fueron para la función combn, que hace algo diferente.

En este caso simplificado, el colors y days son factores, pero en mi ejemplo real, este no es el caso. Algunos de los parámetros de la función son enteros, por lo que mi vector real puede parecerse más al 1, 2, 3 y la función requerirá que se le pase como numérico. Entonces, por favor, no hay soluciones que se basen en niveles de factores, si de alguna manera no se pueden usar para trabajar con enteros.

+0

relacionadas: http://stackoverflow.com/questions/3993546/how-to-generate-a-matrix-of-combinations –

+0

posible duplicado de [Encontrar todas las combinaciones posibles de tres cadenas] (http://stackoverflow.com/questions/6254533/finding-all-possible-combinations -of-a-tres-cuerdas) –

Respuesta

22

Creo que lo que desea es expand.grid:

> colors = c("red", "green", "blue") 
> days = c("Monday", "Tuesday") 
> expand.grid(colors,days) 
    Var1 Var2 
1 red Monday 
2 green Monday 
3 blue Monday 
4 red Tuesday 
5 green Tuesday 
6 blue Tuesday 

Y, si desea especificar los nombres de las columnas en la misma línea:

> expand.grid(color = colors, day = days) 
    color  day 
1 red Monday 
2 green Monday 
3 blue Monday 
4 red Tuesday 
5 green Tuesday 
6 blue Tuesday 
+5

Y, si desea especificar fy los nombres de las columnas en la misma línea, 'expand.grid (color = colors, day = days)' –

Cuestiones relacionadas