Nordlund, Dan (DSHS/RDA) wrote:
-----Original Message-----
From: [email protected] [mailto:r-help-boun...@r-
project.org] On Behalf Of Peter Dalgaard
Sent: Thursday, July 22, 2010 3:13 PM
To: Pat Schmitz
Cc: [email protected]
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,

I suspect that's not intentional, though I'm not sure it should be fixed. According to the usual convention the result should be a logical NA.

Duncan Murdoch

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to