[R] Non repetitive permutations/combinations of elements
Marc Schwartz (via MN)
mschwartz at mn.rr.com
Tue May 9 00:05:03 CEST 2006
Bert,
That will result in a data frame, rather than a matrix:
> str(expand.grid(rep(list(c(-1, 1)), 4)))
`data.frame': 16 obs. of 4 variables:
$ Var1: num -1 1 -1 1 -1 1 -1 1 -1 1 ...
$ Var2: num -1 -1 1 1 -1 -1 1 1 -1 -1 ...
$ Var3: num -1 -1 -1 -1 1 1 1 1 -1 -1 ...
$ Var4: num -1 -1 -1 -1 -1 -1 -1 -1 1 1 ...
- attr(*, "out.attrs")=List of 2
..$ dim : int 2 2 2 2
..$ dimnames:List of 4
.. ..$ Var1: chr "Var1=-1" "Var1= 1"
.. ..$ Var2: chr "Var2=-1" "Var2= 1"
.. ..$ Var3: chr "Var3=-1" "Var3= 1"
.. ..$ Var4: chr "Var4=-1" "Var4= 1"
- attr(*, "colnames")= chr "Var1" "Var2" "Var3" "Var4"
Nameeta asked for a matrix, hence the coercion in my reply.
Best regards,
Marc
On Mon, 2006-05-08 at 14:59 -0700, Berton Gunter wrote:
> expand.grid(rep(list(c(-1, 1)), 4)) suffices I believe.
>
> -- Bert Gunter
> Genentech Non-Clinical Statistics
> South San Francisco, CA
>
>
> > -----Original Message-----
> > From: r-help-bounces at stat.math.ethz.ch
> > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Marc
> > Schwartz (via MN)
> > Sent: Monday, May 08, 2006 2:50 PM
> > To: Nameeta Lobo
> > Cc: r-help at stat.math.ethz.ch
> > Subject: Re: [R] Non repetitive permutations/combinations of elements
> >
> > 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.d
> > o?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