[R] Non repetitive permutations/combinations of elements

Marc Schwartz (via MN) mschwartz at mn.rr.com
Mon May 8 23:50:27 CEST 2006


On Mon, 2006-05-08 at 16:32 -0500, Nameeta Lobo wrote:
> Hello all,
> 
> I am trying to create a matrix of 1s and -1s without any repetitions for a
> specified number of columns.
> e.g. 1s and -1s for 3 columns can be done uniquely in 2^3 ways.
> -1 -1 -1
> -1 -1  1
> -1  1 -1
> -1  1  1
>  1 -1 -1
>  1 -1  1
>  1  1 -1
>  1  1  1
> and for 4 columns in 2^4 ways and so on.
> 
> I finally used the function combn([0 1],3) that I found at the following link
> http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=7147&objectType=FILE
> written by Jos van der Geest in Matlab which generated the above.
> 
> 
> How can I do this is R? I have looked at permn and combn in the combinat library
> and permutations and combinations in the gtools library and I am still confused
> as to how to get it to work.
> 
> Any suggestions will be truly appreciated.
> 
> Thank you
> 
> Nameeta
> 

With just two elements in the source vector, it may be easiest to just
use expand.grid() and coerce the result to a matrix:

> as.matrix(expand.grid(rep(list(c(-1, 1)), 3)))
  Var1 Var2 Var3
1   -1   -1   -1
2    1   -1   -1
3   -1    1   -1
4    1    1   -1
5   -1   -1    1
6    1   -1    1
7   -1    1    1
8    1    1    1

Just adjust the final value of '3' to the number of columns that you
wish to have:

> as.matrix(expand.grid(rep(list(c(-1, 1)), 4)))
   Var1 Var2 Var3 Var4
1    -1   -1   -1   -1
2     1   -1   -1   -1
3    -1    1   -1   -1
4     1    1   -1   -1
5    -1   -1    1   -1
6     1   -1    1   -1
7    -1    1    1   -1
8     1    1    1   -1
9    -1   -1   -1    1
10    1   -1   -1    1
11   -1    1   -1    1
12    1    1   -1    1
13   -1   -1    1    1
14    1   -1    1    1
15   -1    1    1    1
16    1    1    1    1


HTH,

Marc Schwartz




More information about the R-help mailing list