# permutation within rows of a matrix

6 messages
Open this post in threaded view
|
Report Content as Inappropriate

## permutation within rows of a matrix

 Hello This is probably a basic question but I am quite new to R. I need to permute elements within rows of a binary matrix, such as      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]  [1,]    0    0    0    0    1    0    0    0    0     0  [2,]    0    0    1    1    0    0    0    1    1     0  [3,]    0    1    0    0    0    0    1    0    0     0  [4,]    0    0    0    0    0    0    1    1    0     0  [5,]    0    0    0    1    0    0    0    0    1     0  [6,]    0    0    1    1    0    0    0    0    0     1  [7,]    0    0    0    0    0    0    0    0    0     0  [8,]    1    1    0    1    0    0    0    1    0     1  [9,]    1    0    0    1    0    1    0    1    0     0 [10,]    0    0    0    0    0    0    0    1    0     1 That is, elements within each row are permuted freely and independently from the other rows. I see that is is workable by creating a array for each row, performing sample and binding the arrays again, but I wonder whether there is a more efficient way of doing the trick. Any help will be much appreciated.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: permutation within rows of a matrix

 Suppose your matrix is called X. ? sample X[sample(nrow(X)),] Michael On Wed, Nov 16, 2011 at 11:45 AM, Juan Antonio Balbuena <[hidden email]> wrote: > Hello > This is probably a basic question but I am quite new to R. > > I need to permute elements within rows of a binary matrix, such as > >     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] >  [1,]    0    0    0    0    1    0    0    0    0     0 >  [2,]    0    0    1    1    0    0    0    1    1     0 >  [3,]    0    1    0    0    0    0    1    0    0     0 >  [4,]    0    0    0    0    0    0    1    1    0     0 >  [5,]    0    0    0    1    0    0    0    0    1     0 >  [6,]    0    0    1    1    0    0    0    0    0     1 >  [7,]    0    0    0    0    0    0    0    0    0     0 >  [8,]    1    1    0    1    0    0    0    1    0     1 >  [9,]    1    0    0    1    0    1    0    1    0     0 > [10,]    0    0    0    0    0    0    0    1    0     1 > > > That is, elements within each row are permuted freely and independently from > the other rows. > > I see that is is workable by creating a array for each row, performing > sample and binding the arrays again, but I wonder whether there is a more > efficient way of doing the trick. > > Any help will be much appreciated. > > > > -- > View this message in context: http://r.789695.n4.nabble.com/permutation-within-rows-of-a-matrix-tp4076989p4076989.html> Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: permutation within rows of a matrix

 On Wed, 2011-11-16 at 14:29 -0500, R. Michael Weylandt wrote: > Suppose your matrix is called X. > > ? sample > X[sample(nrow(X)),] That will shuffle the rows at random, not permute within the rows. Here is an alternative, first using one of my packages (permute - shameful promotion ;-) !: mat <- matrix(sample(0:1, 100, replace = TRUE), ncol = 10) require(permute) perms <- shuffleSet(10, nset = 10) ## permute mat t(sapply(seq_len(nrow(perms)),          function(i, perms, mat) mat[i, perms[i,]],          mat = mat, perms = perms)) If you don't want to use permute, then you can do this via standard R functions perms <- t(replicate(nrow(mat), sample(ncol(mat)))) ## permute mat t(sapply(seq_len(nrow(perms)),          function(i, perms, mat) mat[i, perms[i,]],          mat = mat, perms = perms)) HTH G > Michael > > On Wed, Nov 16, 2011 at 11:45 AM, Juan Antonio Balbuena <[hidden email]> wrote: > > Hello > > This is probably a basic question but I am quite new to R. > > > > I need to permute elements within rows of a binary matrix, such as > > > >     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] > >  [1,]    0    0    0    0    1    0    0    0    0     0 > >  [2,]    0    0    1    1    0    0    0    1    1     0 > >  [3,]    0    1    0    0    0    0    1    0    0     0 > >  [4,]    0    0    0    0    0    0    1    1    0     0 > >  [5,]    0    0    0    1    0    0    0    0    1     0 > >  [6,]    0    0    1    1    0    0    0    0    0     1 > >  [7,]    0    0    0    0    0    0    0    0    0     0 > >  [8,]    1    1    0    1    0    0    0    1    0     1 > >  [9,]    1    0    0    1    0    1    0    1    0     0 > > [10,]    0    0    0    0    0    0    0    1    0     1 > > > > > > That is, elements within each row are permuted freely and independently from > > the other rows. > > > > I see that is is workable by creating a array for each row, performing > > sample and binding the arrays again, but I wonder whether there is a more > > efficient way of doing the trick. > > > > Any help will be much appreciated. > > > > > > > > -- > > View this message in context: http://r.789695.n4.nabble.com/permutation-within-rows-of-a-matrix-tp4076989p4076989.html> > Sent from the R help mailing list archive at Nabble.com. > > > > ______________________________________________ > > [hidden email] mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. > -- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/ UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: permutation within rows of a matrix

 I must be missing something. What's wrong with   t(apply(mat, 1, sample)) ? Peter Ehlers On 2011-11-16 12:12, Gavin Simpson wrote: > On Wed, 2011-11-16 at 14:29 -0500, R. Michael Weylandt wrote: >> Suppose your matrix is called X. >> >> ? sample >> X[sample(nrow(X)),] > > That will shuffle the rows at random, not permute within the rows. > > Here is an alternative, first using one of my packages (permute - > shameful promotion ;-) !: > > mat<- matrix(sample(0:1, 100, replace = TRUE), ncol = 10) > > require(permute) > perms<- shuffleSet(10, nset = 10) > ## permute mat > t(sapply(seq_len(nrow(perms)), >           function(i, perms, mat) mat[i, perms[i,]], >           mat = mat, perms = perms)) > > If you don't want to use permute, then you can do this via standard R > functions > > perms<- t(replicate(nrow(mat), sample(ncol(mat)))) > ## permute mat > t(sapply(seq_len(nrow(perms)), >           function(i, perms, mat) mat[i, perms[i,]], >           mat = mat, perms = perms)) > > HTH > > G > >> Michael >> >> On Wed, Nov 16, 2011 at 11:45 AM, Juan Antonio Balbuena<[hidden email]>  wrote: >>> Hello >>> This is probably a basic question but I am quite new to R. >>> >>> I need to permute elements within rows of a binary matrix, such as >>> >>>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] >>>   [1,]    0    0    0    0    1    0    0    0    0     0 >>>   [2,]    0    0    1    1    0    0    0    1    1     0 >>>   [3,]    0    1    0    0    0    0    1    0    0     0 >>>   [4,]    0    0    0    0    0    0    1    1    0     0 >>>   [5,]    0    0    0    1    0    0    0    0    1     0 >>>   [6,]    0    0    1    1    0    0    0    0    0     1 >>>   [7,]    0    0    0    0    0    0    0    0    0     0 >>>   [8,]    1    1    0    1    0    0    0    1    0     1 >>>   [9,]    1    0    0    1    0    1    0    1    0     0 >>> [10,]    0    0    0    0    0    0    0    1    0     1 >>> >>> >>> That is, elements within each row are permuted freely and independently from >>> the other rows. >>> >>> I see that is is workable by creating a array for each row, performing >>> sample and binding the arrays again, but I wonder whether there is a more >>> efficient way of doing the trick. >>> >>> Any help will be much appreciated. >>> >>> >>> >>> -- >>> View this message in context: http://r.789695.n4.nabble.com/permutation-within-rows-of-a-matrix-tp4076989p4076989.html>>> Sent from the R help mailing list archive at Nabble.com. >>> >>> ______________________________________________ >>> [hidden email] mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html>>> and provide commented, minimal, self-contained, reproducible code. >>> >> >> ______________________________________________ >> [hidden email] mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html>> and provide commented, minimal, self-contained, reproducible code. >> > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|
Report Content as Inappropriate

## Re: permutation within rows of a matrix

 Seems logical to me -- and, Juan, sorry for messing up earlier -- read too hastily. Michael On Wed, Nov 16, 2011 at 5:55 PM, Peter Ehlers <[hidden email]> wrote: > I must be missing something. What's wrong with > >  t(apply(mat, 1, sample)) > > ? > > Peter Ehlers > > On 2011-11-16 12:12, Gavin Simpson wrote: >> >> On Wed, 2011-11-16 at 14:29 -0500, R. Michael Weylandt wrote: >>> >>> Suppose your matrix is called X. >>> >>> ? sample >>> X[sample(nrow(X)),] >> >> That will shuffle the rows at random, not permute within the rows. >> >> Here is an alternative, first using one of my packages (permute - >> shameful promotion ;-) !: >> >> mat<- matrix(sample(0:1, 100, replace = TRUE), ncol = 10) >> >> require(permute) >> perms<- shuffleSet(10, nset = 10) >> ## permute mat >> t(sapply(seq_len(nrow(perms)), >>          function(i, perms, mat) mat[i, perms[i,]], >>          mat = mat, perms = perms)) >> >> If you don't want to use permute, then you can do this via standard R >> functions >> >> perms<- t(replicate(nrow(mat), sample(ncol(mat)))) >> ## permute mat >> t(sapply(seq_len(nrow(perms)), >>          function(i, perms, mat) mat[i, perms[i,]], >>          mat = mat, perms = perms)) >> >> HTH >> >> G >> >>> Michael >>> >>> On Wed, Nov 16, 2011 at 11:45 AM, Juan Antonio Balbuena<[hidden email]> >>>  wrote: >>>> >>>> Hello >>>> This is probably a basic question but I am quite new to R. >>>> >>>> I need to permute elements within rows of a binary matrix, such as >>>> >>>>     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] >>>>  [1,]    0    0    0    0    1    0    0    0    0     0 >>>>  [2,]    0    0    1    1    0    0    0    1    1     0 >>>>  [3,]    0    1    0    0    0    0    1    0    0     0 >>>>  [4,]    0    0    0    0    0    0    1    1    0     0 >>>>  [5,]    0    0    0    1    0    0    0    0    1     0 >>>>  [6,]    0    0    1    1    0    0    0    0    0     1 >>>>  [7,]    0    0    0    0    0    0    0    0    0     0 >>>>  [8,]    1    1    0    1    0    0    0    1    0     1 >>>>  [9,]    1    0    0    1    0    1    0    1    0     0 >>>> [10,]    0    0    0    0    0    0    0    1    0     1 >>>> >>>> >>>> That is, elements within each row are permuted freely and independently >>>> from >>>> the other rows. >>>> >>>> I see that is is workable by creating a array for each row, performing >>>> sample and binding the arrays again, but I wonder whether there is a >>>> more >>>> efficient way of doing the trick. >>>> >>>> Any help will be much appreciated. >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://r.789695.n4.nabble.com/permutation-within-rows-of-a-matrix-tp4076989p4076989.html>>>> Sent from the R help mailing list archive at Nabble.com. >>>> >>>> ______________________________________________ >>>> [hidden email] mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-help>>>> PLEASE do read the posting guide >>>> http://www.R-project.org/posting-guide.html>>>> and provide commented, minimal, self-contained, reproducible code. >>>> >>> >>> ______________________________________________ >>> [hidden email] mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help>>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html>>> and provide commented, minimal, self-contained, reproducible code. >>> >> > > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.