Returns the (regular or parallel) maxima and minima of the input values.
pmax*()
and pmin*()
take one or more vectors as
arguments, recycle them to common length and return a single vector
giving the ‘parallel’ maxima (or minima) of the argument
vectors.
Usage
# S3 method for default
min(...)
Value
For min
or max
, a length-one vector. For pmin
or
pmax
, a vector of length the longest of the input vectors, or
length zero if one of the inputs had zero length.
The type of the result will be that of the highest of the inputs in the hierarchy integer < double < character.
For min
and max
if there are only numeric inputs and all
are empty (after possible removal of NA
s), the result is double
(Inf
or -Inf
).
Details
max
and min
return the maximum or minimum of all
the values present in their arguments, as integer
if
all are logical
or integer
, as double
if
all are numeric, and character otherwise.
If na.rm
is FALSE
an NA
value in any of the
arguments will cause a value of NA
to be returned, otherwise
NA
values are ignored.
The minimum and maximum of a numeric empty set are +Inf
and
-Inf
(in this order!) which ensures transitivity, e.g.,
min(x1, min(x2)) == min(x1, x2)
. For numeric x
max(x) == -Inf
and min(x) == +Inf
whenever length(x) == 0
(after removing missing values if
requested). However, pmax
and pmin
return
NA
if all the parallel elements are NA
even for
na.rm = TRUE
.
pmax
and pmin
take one or more vectors (or matrices) as
arguments and return a single vector giving the ‘parallel’
maxima (or minima) of the vectors. The first element of the result is
the maximum (minimum) of the first elements of all the arguments, the
second element of the result is the maximum (minimum) of the second
elements of all the arguments and so on. Shorter inputs (of non-zero
length) are recycled if necessary. Attributes (see
attributes
: such as names
or
dim
) are copied from the first argument (if applicable,
e.g., not for an S4
object).
pmax.int
and pmin.int
are faster internal versions only
used when all arguments are atomic vectors and there are no classes:
they drop all attributes. (Note that all versions fail for raw and
complex vectors since these have no ordering.)
max
and min
are generic functions: methods can be
defined for them individually or via the
Summary
group generic. For this to
work properly, the arguments ...
should be unnamed, and
dispatch is on the first argument.
By definition the min/max of a numeric vector containing an NaN
is NaN
, except that the min/max of any vector containing an
NA
is NA
even if it also contains an NaN
.
Note that max(NA, Inf) == NA
even though the maximum would be
Inf
whatever the missing value actually is.
Character versions are sorted lexicographically, and this depends on
the collating sequence of the locale in use: the help for
‘Comparison’ gives details. The max/min of an empty
character vector is defined to be character NA
. (One could
argue that as ""
is the smallest character element, the maximum
should be ""
, but there is no obvious candidate for the
minimum.)
Examples
require(stats); require(graphics)
min(5:1, pi) #-> one number
#> [1] 1
pmin(5:1, pi) #-> 5 numbers
#> [1] 3.141593 3.141593 3.000000 2.000000 1.000000
x <- sort(rnorm(100)); cH <- 1.35
pmin(cH, quantile(x)) # no names
#> [1] -1.9795551 -0.4184236 0.0570799 0.9998789 1.3500000
pmin(quantile(x), cH) # has names
#> 0% 25% 50% 75% 100%
#> -1.9795551 -0.4184236 0.0570799 0.9998789 1.3500000
plot(x, pmin(cH, pmax(-cH, x)), type = "b", main = "Huber's function")
cut01 <- function(x) pmax(pmin(x, 1), 0)
curve( x^2 - 1/4, -1.4, 1.5, col = 2)
curve(cut01(x^2 - 1/4), col = "blue", add = TRUE, n = 500)
## pmax(), pmin() preserve attributes of *first* argument
D <- diag(x = (3:1)/4) ; n0 <- numeric()
stopifnot(identical(D, cut01(D) ),
identical(n0, cut01(n0)),
identical(n0, cut01(NULL)),
identical(n0, pmax(3:1, n0, 2)),
identical(n0, pmax(n0, 4)))