blob: 4fb116f723a68916f6f2ec10ae3fa81703cd2302 [file] [log] [blame]
% File src/library/base/man/NA.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2018 R Core Team
% Distributed under GPL 2 or later
\name{NA}
\alias{NA}
\alias{NA_integer_}
\alias{NA_real_}
\alias{NA_complex_}
\alias{NA_character_}
\alias{is.na}
\alias{is.na.data.frame}
\alias{is.na<-}
\alias{is.na<-.default}
\alias{anyNA}
\alias{anyMissing}% an alternative name (in Biobase and S+ as of ~2006)
\title{\sQuote{Not Available} / Missing Values}
\description{
\code{NA} is a logical constant of length 1 which contains a missing
value indicator. \code{NA} can be coerced to any other vector
type except raw. There are also constants \code{NA_integer_},
\code{NA_real_}, \code{NA_complex_} and \code{NA_character_} of the
other atomic vector types which support missing values: all of these
are \link{reserved} words in the \R language.
The generic function \code{is.na} indicates which elements are missing.
The generic function \code{is.na<-} sets elements to \code{NA}.
The generic function \code{anyNA} implements \code{any(is.na(x))} in a
possibly faster way (especially for atomic vectors).
}
\usage{
NA
is.na(x)
anyNA(x, recursive = FALSE)
\method{is.na}{data.frame}(x)
is.na(x) <- value
}
\arguments{
\item{x}{an \R object to be tested: the default method for
\code{is.na} and \code{anyNA} handle atomic vectors, lists,
pairlists, and \code{NULL}.}
\item{recursive}{logical: should \code{anyNA} be applied recursively
to lists and pairlists?}
\item{value}{a suitable index vector for use with \code{x}.}
}
\details{
The \code{NA} of character type is distinct from the string
\code{"NA"}. Programmers who need to specify an explicit missing
string should use \code{NA_character_} (rather than \code{"NA"}) or set
elements to \code{NA} using \code{is.na<-}.
\code{is.na} and \code{anyNA} are generic: you can write
methods to handle specific classes of objects, see
\link{InternalMethods}.
Function \code{is.na<-} may provide a safer way to set missingness.
It behaves differently for factors, for example.
Numerical computations using \code{NA} will normally result in
\code{NA}: a possible exception is where \code{\link{NaN}} is also
involved, in which case either might result (which may depend on
the \R platform). Logical computations treat \code{NA} as a missing
\code{TRUE/FALSE} value, and so may return \code{TRUE} or \code{FALSE}
if the expression does not depend on the \code{NA} operand.
The default method for \code{anyNA} handles atomic vectors without a
class and \code{NULL}. It calls \code{any(is.na(x))} on objects with
classes and for \code{recursive = FALSE}, on lists and pairlists.
}
\value{
The default method for \code{is.na} applied to an atomic vector
returns a logical vector of the same length as its argument \code{x},
containing \code{TRUE} for those elements marked \code{NA} or, for
numeric or complex vectors, \code{\link{NaN}}, and \code{FALSE}
otherwise. (A complex value is regarded as \code{NA} if either its
real or imaginary part is \code{NA} or \code{\link{NaN}}.)
\code{dim}, \code{dimnames} and \code{names} attributes are copied to
the result.
The default methods also work for lists and pairlists:\cr
For \code{is.na}, elementwise the result is false unless that element
is a length-one atomic vector and the single element of that vector is
regarded as \code{NA} or \code{NaN} (note that any \code{is.na}
method for the class of the element is ignored).\cr
\code{anyNA(recursive = FALSE)} works the same way as \code{is.na};
\code{anyNA(recursive = TRUE)} applies \code{anyNA} (with method
dispatch) to each element.
The data frame method for \code{is.na} returns a logical matrix
with the same dimensions as the data frame, and with dimnames taken
from the row and column names of the data frame.
\code{anyNA(NULL)} is false; \code{is.na(NULL)} is \code{logical(0)}
(no longer warning since \R version 3.5.0).
}
\references{
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
\emph{The New S Language}.
Wadsworth & Brooks/Cole.
Chambers, J. M. (1998)
\emph{Programming with Data. A Guide to the S Language}.
Springer.
}
\seealso{
\code{\link{NaN}}, \code{\link{is.nan}}, etc.,
and the utility function \code{\link{complete.cases}}.
\code{\link{na.action}}, \code{\link{na.omit}}, \code{\link{na.fail}}
on how methods can be tuned to deal with missing values.
}
\examples{
is.na(c(1, NA)) #> FALSE TRUE
is.na(paste(c(1, NA))) #> FALSE FALSE
(xx <- c(0:4))
is.na(xx) <- c(2, 4)
xx #> 0 NA 2 NA 4
anyNA(xx) # TRUE
# Some logical operations do not return NA
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA
\donttest{
## Measure speed difference in a favourable case:
## the difference depends on the platform, on most ca 3x.
x <- 1:10000; x[5000] <- NaN # coerces x to be double
if(require("microbenchmark")) { # does not work reliably on all platforms
print(microbenchmark(any(is.na(x)), anyNA(x)))
} else {
nSim <- 2^13
print(rbind(is.na = system.time(replicate(nSim, any(is.na(x)))),
anyNA = system.time(replicate(nSim, anyNA(x)))))
}
}
## anyNA() can work recursively with list()s:
LL <- list(1:5, c(NA, 5:8), c("A","NA"), c("a", NA_character_))
L2 <- LL[c(1,3)]
sapply(LL, anyNA); c(anyNA(LL), anyNA(LL, TRUE))
sapply(L2, anyNA); c(anyNA(L2), anyNA(L2, TRUE))
## ... lists, and hence data frames, too:
dN <- dd <- USJudgeRatings; dN[3,6] <- NA
anyNA(dd) # FALSE
anyNA(dN) # TRUE
}
\keyword{NA}
\keyword{logic}
\keyword{manip}