2010-10-22 16 views
15

Mam 5 elementów, z których każda może przyjąć wartość 1 lub -1. Chcę wygenerować macierz złożoną z rzędów możliwych kombinacji. Kolejność pozycji nie ma znaczenia, a kolejność kombinacji nie ma znaczenia. Wiem, że mogłem to zrobić mechanicznie, ale myślałem, że ktoś musi znać skrót do generowania tej macierzy. Przepraszam, jeśli jest to podobne do innych pytań, ale żadne z rozwiązań, które znalazłem, nie może być zastosowane do tego konkretnego problemu z moimi umiejętnościami programowania.Jak wygenerować macierz kombinacji

Odpowiedz

27
expand.grid(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1)) 
20

Uogólniając Grega odpowiedź:

N <- 5 
vec <- c(-1, 1) 
lst <- lapply(numeric(N), function(x) vec) 
as.matrix(expand.grid(lst)) 
5

alternatywna od data.table opakowania jest nieco szybciej w porównaniu do expand.grid:

library(data.table) 
CJ(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))