[R] Question about a perceived irregularity in R syntax

Nordlund, Dan (DSHS/RDA) NordlDJ at dshs.wa.gov
Fri Jul 23 00:31:38 CEST 2010


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Peter Dalgaard
> Sent: Thursday, July 22, 2010 3:13 PM
> To: Pat Schmitz
> Cc: r-help at r-project.org
> Subject: Re: [R] Question about a perceived irregularity in R syntax
> 
> Pat Schmitz wrote:
> > Both vector query's can select the values from the data.frame as
> written,
> > however in the first form assigning a value to said selected numbers
> fails.
> >  Can you explain the reason this fails?
> >
> > dat <- data.frame(index = 1:10, Value = c(1:4, NA, 6, NA, 8:10))
> >
> > dat$Value[dat$Value == "NA"] <- 1 #Why does this  fails to work,
> > dat$Value[dat$Value %in% NA] <- 1 #While this does work?
> >
> >
> > #Particularly when str() results in an equivalent class
> > dat <- data.frame(index = 1:10, Value = c(1:4, NA, 6, NA, 8:10))
> > str(dat$Value[dat$Value %in% NA])
> > str(dat$Value[dat$Value == "NA"])
> 
> 1. NA and "NA" are very different things
> 2. checkout is.na() and its help page
> 
> 

I also would have suggested is.na to do the replacement.  What surprised me was that 

dat$Value[dat$Value %in% NA] <- 1 

actually worked.  I guess I always assumed that if 

> NA == NA
[1] NA

then an attempt to compare NA to elements in a vector would also return NA, but not so.

> NA %in% c(1,NA,3)
[1] TRUE


Learned something new today,

Dan

Daniel J. Nordlund
Washington State Department of Social and Health Services
Planning, Performance, and Accountability
Research and Data Analysis Division
Olympia, WA 98504-5204




More information about the R-help mailing list