Learn R Programming

base (version 3.3)

maxCol: 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’.

Value

length nrow(m).

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.

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

Run this code
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

Run the code above in your browser using DataLab