one way is:

M <- matrix(sample(13, 9, TRUE), 3, 3)

n <- ncol(M)
ind <- apply(M, 2, which.max)
maxs <- M[cbind(ind, 1:n)]
diags <- diag(M)
diag(M) <- M[cbind(ind, 1:n)]
M[cbind(ind, 1:n)] <- diags
M


I hope it helps.

Best,
Dimitris


On 4/23/2010 10:10 PM, Jonathan wrote:
Hi r-help community,
     This question isn't so much a syntax/coding one, but here goes:

Let's say I have matrix of arbitrary dimensions and I'd like to
reorder the rows in such a way that I could maximize the sum of the
entries along the diagonal.

For example, for this 3x3 matrix:


      [,1] [,2] [,3]
[1,]    3    4   13
[2,]    9    1    2
[3,]    2   11    1

rearranging the rows to maximize the sum along the diagonal would
produce this matrix:

      [,1] [,2] [,3]
[1,]    9    1    2
[2,]    2   11    1
[3,]    3    4   13


I've been experimenting with some scripts of my own, but I figured I'd
ask if one of you R-ninjas might know of an existing function (or
algorithm I could look up and then code) that can do this somewhat
efficiently (or even just correctly!).

Best,
Jonathan

______________________________________________
R-help@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.


--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014

______________________________________________
R-help@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.

Reply via email to