\HeaderA{maxCol}{Find Maximum Position in Matrix}{maxCol}
\aliasA{max.col}{maxCol}{max.col}
\keyword{utilities}{maxCol}
\keyword{array}{maxCol}
\begin{Description}\relax
Find the maximum position for each row of a matrix, breaking ties at random.
\end{Description}
\begin{Usage}
\begin{verbatim}
max.col(m, ties.method=c("random", "first", "last"))
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{m}] numerical matrix
\item[\code{ties.method}] a character string specifying how ties are
handled, \code{"random"} by default; can be abbreviated; see
\sQuote{Details}.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
When \code{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
\eqn{10^{-5}}{1e-5}, relative to the largest (in magnitude, omitting
infinity) entry in the row.

If \code{ties.method = "first"}, \code{max.col} returns the
column number of the \emph{first} of several maxima in every row, the
same   as \code{\LinkA{unname}{unname}(\LinkA{unname}{unname}(m, 1, \LinkA{unname}{unname}))}.\\
Correspondingly, \code{ties.method = "last"} returns the \emph{last}
of possibly several indices.
\end{Details}
\begin{Value}
index of a maximal value for each row, an integer vector of
length \code{nrow(m)}.
\end{Value}
\begin{References}\relax
Venables, W. N. and Ripley, B. D. (2002)
\emph{Modern Applied Statistics with S.}
New York: Springer (4th ed).
\end{References}
\begin{SeeAlso}\relax
\code{\LinkA{which.max}{which.max}} for vectors.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
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

\end{ExampleCode}
\end{Examples}

