[R] permutation within rows of a matrix

Gavin Simpson gavin.simpson at ucl.ac.uk
Thu Nov 17 10:35:22 CET 2011


On Wed, 2011-11-16 at 14:55 -0800, Peter Ehlers wrote:
> I must be missing something. What's wrong with
> 
>   t(apply(mat, 1, sample))
> 
> ?

Only missing that I am either[*] i) stupid, ii) being too clever, iii)
down on my coffee intake for the day.

G

[*] delete as applicable any that don't apply. ;-)

> 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<balbuena at uv.es>  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.
> >>>
> >>> ______________________________________________
> >>> R-help at r-project.org 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.
> >>>
> >>
> >> ______________________________________________
> >> R-help at r-project.org 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
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list