[R] generic handling of NA and NaN and NULL

Liaw, Andy andy_liaw at merck.com
Fri Feb 14 00:36:41 CET 2003


> From: Spencer Graves [mailto:spencer.graves at pdf.com]
> 
> How about:
> 
>  > f3 <- function(n){
> +   n.pi <- (abs(n)<pi)
> +   n.pi[is.na(n.pi)] <- F
> +   n.pi
> + }
>  >
>  > f3(c(1, 5, NA))
> [1]  TRUE FALSE FALSE
>  >

A couple of problems: 

a) It chokes if argument is NULL.
b) Use of F instead of FALSE will not pass R CMD check, which is what Robin
wants.

Andy

 
> Spencer Graves
> 
> Robin Hankin wrote:
> > Hello everybody
> > 
> > 
> > I have a generic problem which the following toy function 
> illustrates:
> > 
> > f <- function(n) {
> >   if(abs(n) < pi) {
> >     return(TRUE)
> >   } else {
> >     return(FALSE)
> >   }
> > }
> >                    
> > I want it to return TRUE if abs(n)<pi and FALSE otherwise.  f() is
> > fine as far as it goes, but does not deal well with NA or 
> NaN or NULL
> > (I want these to signal some problem with the argument (ie return
> > FALSE), but not to stop execution of f().  In particular, I want f()
> > to pass R CMD check )-:
> > 
> > R> f(NA)
> > Error in if (abs(n) < pi) { : missing value where logical needed
> > 
> > R> f(NULL)
> > Error in abs(n) : non-numeric argument to function
> > 
> > 
> > So, how best to patch f() up?  The best I could come up with was:
> > 
> > f2 <- function(n) {
> >   if(is.null(n)){return(FALSE)}
> >   if(is.na(n)){return(FALSE)}
> >   if(abs(n) < pi) {
> >     return(TRUE)
> >   } else {
> >     return(FALSE)
> >   }
> > }
> > 
> > This can't be the best way!  Anyway, f2() isn't right: 
> f2(numeric(0))
> > fails; note that
> > 
> > R> if(is.na(numeric(0))){print("asdf")}
> > 
> > falls over.  help.search("trap") was not very helpful.  
> try() doesn't
> > help either:
> > 
> > R> try(if(1==NA){print("asdf")})
> > Error in if (1 == NA) { : missing value where logical needed
> > 
> > 
> > 
> > QUESTION: how to make f() not give an error under any circumstances?
> > 
> > 
> > 
> > 
> > 
> >
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> http://www.stat.math.ethz.ch/mailman/listinfo/r-help
> 


------------------------------------------------------------------------------




More information about the R-help mailing list