[R] Problems with NA's
Marc Schwartz
marc_schwartz at comcast.net
Tue Nov 20 04:34:23 CET 2007
On Mon, 2007-11-19 at 22:18 -0500, Thomas L Jones, PhD wrote:
> Difficulty handling NA's:
> Assume that I have a numeric vector y. For simplicity, assume that it has 10
> elements. Assume that the third element has the value NA. I give it the
> following:
> NA_test <- function (){
> y <- numeric (10)
> y [3] <- NA
> if (y [3] != NA){(print ("no")}
> print ("Leaving NA_test")
> return ()
> }# End of function
>
> -------------------------------------------------------------
> Unfortunately, things become confused involving the NA element.
> Here is the output, starting with the loading process:
>
> ----------------------------------------------------------
> > NA_test <- function (){
> + y <- numeric (10)
> + y [3] <- NA
> + if (y [3] != NA){(print ("no")}
> Error: syntax error in:
> "y [3] <- NA
> if (y [3] != NA){(print ("no")}"
> > print ("Leaving NA_test")
> [1] "Leaving NA_test"
> > return ()
> Error: no function to return from, jumping to top level
> > }# End of function
> Error: syntax error in "}"
> >
> ---------------------------------------------------------------------
> I have enclosed the print operation in braces to avoid possible problems
> with it.
>
> Your advice?
>
> Tom Jones
Since NA is an undefined value by definition, you cannot use
[in]equalities to test for its presence or absence.
Thus:
1. To test if an element in a vector is NA, use:
is.na(Vec)
2. To set one or more elements in a vector to NA use:
is.na(Vec) <- Indices
So:
y <- numeric(10)
> y
[1] 0 0 0 0 0 0 0 0 0 0
is.na(y) <- 3
> y
[1] 0 0 NA 0 0 0 0 0 0 0
> is.na(y)
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> is.na(y[3])
[1] TRUE
See ?NA for more information.
HTH,
Marc Schwartz
More information about the R-help
mailing list