[R] Q: sort a matrix by picking up columns?

Renaud Lancelot lancelot at telecomplus.sn
Thu Oct 14 11:53:26 CEST 1999

```Hello Jan,

> do.call("order", data.frame(Mat[,c(1,3,6,8,10,13)]))
>
> NB do.call expects the name of the function to be called as the first argument
> and the arguments to that function in terms of a list. This list can (I think
> most easily) be obtained by using data.frame().

IMHO, this does not do what is needed:

> m <- matrix(c(9:5, c(1, 4, 3, 3, 5), c(1, 2, 4, 3, 5)), ncol = 3, byrow = F)
> m
[,1] [,2] [,3]
[1,]    9    1    1
[2,]    8    4    2
[3,]    7    3    4
[4,]    6    3    3
[5,]    5    5    5
> do.call("order", data.frame(m[, c(2, 3)]))
[1] 1 4 3 2 5

Using the same idea, we could write a small function:

> SortMat <- function(Mat, Sort)
{
m <- do.call("order", as.data.frame(Mat[, Sort]))
Mat[m,  ]
}
> m
[,1] [,2] [,3]
[1,]    9    1    1
[2,]    8    4    2
[3,]    7    3    4
[4,]    6    3    3
[5,]    5    5    5
> SortMat(Mat = m, Sort = c(2, 3))
[,1] [,2] [,3]
[1,]    9    1    1
[2,]    6    3    3
[3,]    7    3    4
[4,]    8    4    2
[5,]    5    5    5

Hope this helps,

Renaud

--
Renaud Lancelot
ISRA-LNERV
BP 2057 Dakar-Hann
Senegal

tel 	(221) 832 49 02
fax 	(221) 821 18 79