% File src/library/base/man/which.min.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2016 R Core Team
% Distributed under GPL 2 or later

\name{which.min}
\alias{which.min}
\alias{which.max}
\title{Where is the Min() or Max() or first TRUE or FALSE ?}
\concept{argmin}
\concept{argmax}
\concept{index of minimum}
\concept{index of maximum}
\concept{index of first TRUE}
\concept{index of first FALSE}
\description{
  Determines the location, i.e., index of the (first) minimum or maximum
  of a numeric (or logical) vector.
}
\usage{
which.min(x)
which.max(x)
}
\arguments{
  \item{x}{numeric (logical, integer or double) vector or an \R object
    for which the internal coercion to \code{\link{double}} works whose
    \code{\link{min}} or \code{\link{max}} is searched for.}
}
\section{Logical \code{x} -- First \code{TRUE} or \code{FALSE}}{
  For a \code{\link{logical}} vector \code{x} with both \code{FALSE} and
  \code{TRUE} values, \code{which.min(x)} and \code{which.max(x)} return
  the index of the first \code{FALSE} or \code{TRUE}, respectively, as
  \code{FALSE < TRUE}.  However, \code{match(FALSE, x)} or
  \code{match(TRUE, x)} are typically \emph{preferred}, as they do
  indicate mismatches.
}
\value{
  Missing and \code{NaN} values are discarded.

  an \code{\link{integer}} or on 64-bit platforms, if
  \code{\link{length}(x) =: n}\eqn{\ge 2^{31}}{>= 2^31} an integer
  valued \code{\link{double}} of length 1 or 0 (iff \code{x} has no
  non-\code{NA}s), giving the index of the \emph{first} minimum or
  maximum respectively of \code{x}.

  If this extremum is unique (or empty), the results are the same as
  (but more efficient than) \code{which(x == min(x, na.rm = TRUE))} or
  \code{which(x == max(x, na.rm = TRUE))} respectively.
}
\author{Martin Maechler}
\seealso{
  \code{\link{which}}, \code{\link{max.col}}, \code{\link{max}}, etc.

  Use \code{\link{arrayInd}()}, if you need array/matrix indices instead
  of 1D vector ones.

  \code{\link[nnet]{which.is.max}} in package \CRANpkg{nnet} differs in
  breaking ties at random (and having a \sQuote{fuzz} in the definition
  of ties).
}
\examples{
x <- c(1:4, 0:5, 11)
which.min(x)
which.max(x)

## it *does* work with NA's present, by discarding them:
presidents[1:30]
range(presidents, na.rm = TRUE)
which.min(presidents) # 28
which.max(presidents) #  2

## Find the first occurrence, i.e. the first TRUE, if there is at least one:
x <- rpois(10000, lambda = 10); x[sample.int(50, 20)] <- NA
## where is the first value >= 20 ?
which.max(x >= 20)

## Also works for lists (which can be coerced to numeric vectors):
which.min(list(A = 7, pi = pi)) ##  ->  c(pi = 2L)
\dontshow{stopifnot(identical(which.min(list(A = 7, pi = pi)), c(pi = 2L)))}
}
\keyword{utilities}
