[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