Description Usage Arguments Details Value References See Also Examples
NA
is a logical constant of length 1 which contains a missing
value indicator. NA
can be coerced to any other vector
type except raw. There are also constants NA_integer_
,
NA_real_
, NA_complex_
and NA_character_
of the
other atomic vector types which support missing values: all of these
are reserved words in the R language.
The generic function is.na
indicates which elements are missing.
The generic function is.na<-
sets elements to NA
.
The generic function anyNA
implements any(is.na(x))
in a
possibly faster way (especially for atomic vectors).
1 2 3 4 5 6 7 8 |
x |
an R object to be tested: the default method for
|
recursive |
logical: should |
value |
a suitable index vector for use with |
The NA
of character type is distinct from the string
"NA"
. Programmers who need to specify an explicit missing
string should use NA_character_
(rather than "NA"
) or set
elements to NA
using is.na<-
.
is.na
and anyNA
are generic: you can write
methods to handle specific classes of objects, see
InternalMethods.
Function is.na<-
may provide a safer way to set missingness.
It behaves differently for factors, for example.
Numerical computations using NA
will normally result in NA
: a
possible exception is where NaN
is also involved, in
which case either might result. Logical computations treat NA
as a missing TRUE/FALSE
value, and so may return TRUE
or
FALSE
if the expression does not depend on the NA
operand.
The default method for anyNA
handles atomic vectors without a
class and NULL
. It calls any(is.na(x)
on objects with
classes and for recursive = FALSE
, on lists and pairlists.
The default method for is.na
applied to an atomic vector
returns a logical vector of the same length as its argument x
,
containing TRUE
for those elements marked NA
or, for
numeric or complex vectors, NaN
, and FALSE
otherwise. (A complex value is regarded as NA
if either its
real or imaginary part is NA
or NaN
.)
dim
, dimnames
and names
attributes are copied to
the result.
The default methods also work for lists and pairlists:
For 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 NA
or NaN
(note that any is.na
method for the class of the element is ignored).
anyNA(recursive = FALSE)
works the same way as is.na
;
anyNA(recursive = TRUE)
applies anyNA
(with method
dispatch) to each element.
The data frame method for 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.
anyNA(NULL)
is false: is.na(NULL)
is logical(0)
with a warning.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.
NaN
, is.nan
, etc.,
and the utility function complete.cases
.
na.action
, na.omit
, na.fail
on how methods can be tuned to deal with missing values.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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
## 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
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.