2011-10-26 15 views
9

Tło: Mam funkcję, która pobiera pewne parametry. Chcę uzyskać wynik funkcji dla wszystkich możliwych kombinacji parametrów.W R, w jaki sposób uzyskać wszystkie możliwe kombinacje wartości niektórych wektorów?

Uproszczony przykład:

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

chcę mój wynik wyglądać

 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" 

moim pomysłem jest stworzenie macierzy z kolumnami color i day, wypełnić go przy użyciu istniejących wektorów colors i days, zainicjuj pustą kolumnę dla wyników, a następnie użyj pętli, aby wywołać f raz na wiersz macierzy i zapisz wynik do ostatniej kolumny. Ale nie wiem, jak łatwo wygenerować matrycę z wektora colors i days. Próbowałem go szukać, ale wszystkie wyniki otrzymałem dla funkcji combn, która robi coś innego.

W tym uproszczonym przypadku, colors i days są czynnikami, ale w moim prawdziwym przykładzie tak nie jest. Niektóre parametry funkcji są liczbami całkowitymi, więc mój prawdziwy wektor może wyglądać bardziej jak 1, 2, 3, a funkcja będzie wymagać, aby została przekazana jako numeryczna. Więc proszę nie zadowalajcie się rozwiązaniami, które opierają się na poziomach czynników, jeśli nie mogą być w jakiś sposób wykorzystane do pracy z liczbami całkowitymi.

+0

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

+0

możliwy duplikat [Znajdowanie wszystkich możliwych kombinacji trzech ciągów znaków] (http://stackoverflow.com/questions/6254533/finding-all-possible-combinations z trzech strun) –

Odpowiedz

22

myślę po prostu chcesz 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 

A jeśli chcesz podać nazwy kolumn w tej samej linii:

> 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

A jeśli chcesz speci fy nazwy kolumn w tym samym wierszu, 'expand.grid (color = colors, day = days)' –

Powiązane problemy