Hi, All, How can I get the indices of the minimum elements in a matrix without using a loop? For example, if the matrix is 4 5 2 2 8 9 5 2 3 Then I want to output (1,3), (2,1), (3,2). Thanks, Annie [[alternative HTML version deleted]]
Try this: m <- rbind(c(4,5,2), c(2,8,9), c(5,2,3)) cbind(1:NROW(m), apply(m, 1, which.min)) On Thu, Sep 10, 2009 at 3:34 PM, annie Zhang <annie.zhang2010@gmail.com>wrote:> Hi, All, > > How can I get the indices of the minimum elements in a matrix without using > a loop? > > For example, if the matrix is > > 4 5 2 > 2 8 9 > 5 2 3 > > Then I want to output (1,3), (2,1), (3,2). > > Thanks, > > Annie > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]
On Sep 10, 2009, at 1:34 PM, annie Zhang wrote:> Hi, All, > > How can I get the indices of the minimum elements in a matrix > without using > a loop? > > For example, if the matrix is > > 4 5 2 > 2 8 9 > 5 2 3 > > Then I want to output (1,3), (2,1), (3,2). > > Thanks, > > Anniemat <- matrix(c(4, 2, 5, 5, 8, 2, 2, 9, 3), 3) > mat [,1] [,2] [,3] [1,] 4 5 2 [2,] 2 8 9 [3,] 5 2 3 > which(mat == min(mat), arr.ind = TRUE) row col [1,] 2 1 [2,] 3 2 [3,] 1 3 See ?which and take note of the arr.ind argument. HTH, Marc Schwartz