[R] Sorting rows of a binary matrix

Adrian Dusa dusa.adrian at gmail.com
Thu Feb 22 14:52:00 CET 2007


And, for multiple bases:

myfunc <- function(cols, bases) {
   create <- function(idx) {
        rep.int(c(sapply(seq_len(bases)-1, function(x)
            rep.int(x, bases^(idx-1)))), bases^cols/bases^idx)
        }
    sapply(rev(seq_len(cols)), create)
    }

# For 3 columns in base 2
myfunc(3, 2)

# For 3 columns in base 3
myfunc(3, 3)

hth,
Adrian


On Thursday 22 February 2007 15:00, Adrian Dusa wrote:
> Hello Serguei,
>
> Is this what you need?
>
> myfunc <- function(x) {
>     create <- function(idx) {
>         rep.int(c(rep.int(0,2^(idx-1)), rep.int(1,2^(idx-1))),
>                 2^x/2^idx)
>         }
>     sapply(rev(seq(x)), create)
>     }
>
> > myfunc(3)
>
>      [,1] [,2] [,3]
> [1,]    0    0    0
> [2,]    0    0    1
> [3,]    0    1    0
> [4,]    0    1    1
> [5,]    1    0    0
> [6,]    1    0    1
> [7,]    1    1    0
> [8,]    1    1    1
>
> For numerical values only, this is faster than expand.grid().
> Alternatively (for multiple values in separate varaibles), you could use
> the function createMatrix() in package QCA.
>
> HTH,
> Adrian
>
> On Thursday 22 February 2007 12:50, Serguei Kaniovski wrote:
> > Hallo,
> >
> > The command:
> >
> > x <- 3
> > mat <- as.matrix(expand.grid(rep(list(0:1), x)))
> >
> > generates a matrix with 2^x columns containing the binary representations
> > of the decimals from 0 to (2^x-1), here from 0 to 7. But the rows are not
> > sorted in this order.
> >
> > How can sort the rows the ascending order of the decimals they represent,
> > preferably without a function which converts binaries to decimals (which
> > I have)? Alternatively, generate a matrix that has the rows sorted that
> > way?
> >
> > Thanks,
> > Serguei
> > 	[[alternative HTML version deleted]]

-- 
Adrian Dusa
Romanian Social Data Archive
1, Schitu Magureanu Bd
050025 Bucharest sector 5
Romania
Tel./Fax: +40 21 3126618 \
          +40 21 3120210 / int.101



More information about the R-help mailing list