20

I have 5 items each of which can take on the value of 1 or -1. I want to generate a matrix that consists of rows of the possible combinations. The order of the items does not matter and the order of the combinations does not matter. I know I could do this mechanically, but I thought that someone must know a shortcut to generating this matrix. I apologize if this is similar to other questions but none of the solutions I have found can be applied to this particular problem with my programming skills.

Bulat
  • 6,869
  • 1
  • 29
  • 52
ProbablePattern
  • 703
  • 2
  • 7
  • 17

3 Answers3

33
expand.grid(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
Greg
  • 11,564
  • 5
  • 41
  • 27
23

To generalize Greg's answer:

N   <- 5
vec <- c(-1, 1)
lst <- lapply(numeric(N), function(x) vec)
as.matrix(expand.grid(lst))
caracal
  • 2,690
  • 19
  • 22
7

Alternative from data.table package is slightly faster compared to expand.grid:

library(data.table)  
CJ(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
Bulat
  • 6,869
  • 1
  • 29
  • 52