Richard A. O'Keefe wrote:

I am puzzled by the advice to use is.na(x) <- TRUE instead of x <- NA.

?NA says
     Function `is.na<-' may provide a safer way to set missingness. It
     behaves differently for factors, for example.

However, "MAY provide" is a bit scary, and it doesn't say WHAT the
difference in behaviour is.

I must say that "is.na(x) <- ..." is rather repugnant, because it doesn't
work.  What do I mean?  Well, as the designers of SETL who many years ago
coined the term "sinister function call" to talk about f(...)<-...,
pointed out, if you do
    f(x) <- y
then afterwards you expect
    f(x) == y
to be true.  So let's try it:

    > x <- c(1,NA,3)
    > is.na(x) <- c(FALSE,FALSE,TRUE)
    > x
    [1]  1 NA NA
    > is.na(x)
    [1] FALSE  TRUE  TRUE
                        vvvvv
So I _assigned_ c(FALSE,FALSE,TRUE) to is.na(x),
    but I _got_ c(FALSE,TRUE, TRUE)> instead.
                        ^^^^^
That is not how a well behaved sinister function call should work,
and it's enough to scare someone off is.na()<- forever.

The obvious way to set elements of a variable to missing is ... <- NA.
Wouldn't it be better if that just plain worked?

Can someone give an example of is.na()<- and <-NA working differently
with a factor?  I just tried it:

> x <- factor(c(3,1,4,1,5,9))
> y <- x
> is.na(x) <- x==1
> y[y==1] <- NA
> x
[1] 3 <NA> 4 <NA> 5 9 Levels: 1 3 4 5 9
> y
[1] 3 <NA> 4 <NA> 5 9 Levels: 1 3 4 5 9


Both approaches seem to have given the same answer. What did I miss?


As mentioned in another mail to R-help. I'm pretty sure there was (is?) a problem with character (and/or factor) and assignment of NAs, but I cannot (re)produce an example. I think something for the "x <- NA" case has been fixed during the last year.
What prevents me to think I'm completely confused is that the is.na()<- usage is proposed in: ?NA, S Programming, the R Language Definition manual, R's News file, but I cannot find it in the green book right now.


Uwe Ligges

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to