maxCol                 package:base                 R Documentation

Find Maximum Position in Matrix

Description:

     Find the maximum position for each row of a matrix, breaking ties
     at random.

Usage:

     max.col(m, ties.method=c("random", "first", "last"))

Arguments:

       m: numerical matrix

ties.method: a character string specifying how ties are handled,
          '"random"' by default; can be abbreviated; see 'Details'.

Details:

     When 'ties.method = "random"', as per default, ties are broken at
     random.  In this case, the determination of a tie assumes that the
     entries are probabilities: there is a relative tolerance of 1e-5,
     relative to the largest (in magnitude, omitting infinity) entry in
     the row.

     If 'ties.method = "first"', 'max.col' returns the column number of
     the _first_ of several maxima in every row, the same   as
     'unname(apply(m, 1, which.max))'.
      Correspondingly, 'ties.method = "last"' returns the _last_ of
     possibly several indices.

Value:

     index of a maximal value for each row, an integer vector of length
     'nrow(m)'.

References:

     Venables, W. N. and Ripley, B. D. (2002) _Modern Applied
     Statistics with S._ New York: Springer (4th ed).

See Also:

     'which.max' for vectors.

Examples:

     table(mc <- max.col(swiss))# mostly "1" and "5", 5 x "2" and once "4"
     swiss[unique(print(mr <- max.col(t(swiss)))) , ] # 3 33 45 45 33 6

     set.seed(1)# reproducible example:
     (mm <- rbind(x = round(2*stats::runif(12)),
                  y = round(5*stats::runif(12)),
                  z = round(8*stats::runif(12))))
     ## Not run: 
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
     x    1    1    1    2    0    2    2    1    1     0     0     0
     y    3    2    4    2    4    5    2    4    5     1     3     1
     z    2    3    0    3    7    3    4    5    4     1     7     5
     ## End(Not run)
     ## column indices of all row maxima :
     utils::str(lapply(1:3, function(i) which(mm[i,] == max(mm[i,]))))
     max.col(mm) ; max.col(mm) # "random"
     max.col(mm, "first")# -> 4 6 5
     max.col(mm, "last") # -> 7 9 11

