[R] how to ignore NA with "NA" or "NULL"

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Mon Jun 4 14:20:16 CEST 2012


I find that avoiding using the return() function at all makes my code easier to follow. In your case it is simply incorrect, though, since ifelse is a vector function and return is a control flow function.

Your code is not reproducible and your description isn't clear about how you are handling the return result from this function, so I can't be sure what you are really asking, but I suspect you just want flow control, so use (untested):

na.fill <- function(x, y){        
  i <- is.na(x[1:8700,1])
  xx <- y[1:8700,1]             
  new <- data.frame(xx=xx)
  if ( !all(is.na(xx)) ) { 
   x[1:8700,1][i] <- predict(lm(x[1:8700,1]~xx, na.action=na.exclude),new)[i]
  }
  x
}
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

jeff6868 <geoffrey_klein at etu.u-bourgogne.fr> wrote:

>Hello dear R-users,
>
>I have a problem in my code about ignoring NA values without removing
>them.
>I'm working on a list of files. The aim is to fill one file from
>another
>according to the highest correlation (correlation coeff between all my
>files, so the file which looks like the most to the one I want to
>fill).
>When I have just small gaps of NA, my function works well.
>The problem is when I have only NAs in some files. As a consequence, it
>cannot calculate any correlation coefficients (my previous function in
>the
>case of only NAs in the file returns "NA" for the correlation
>coefficient),
>and so it cannot fill it or make any calculation with it.
>
>Nevertheless in my work I need to keep these NA files in my list (and
>so to
>keep their dimensions). Otherwise it creates some dimensions problems,
>and
>my function needs to me automatic for every files.
>
>So my question in this post is: how to ignore (or do nothing with them
>if
>you prefer) NA files with NA correlation coefficients?
>The function for filling files (where there's the problem) is:
>
>na.fill <- function(x, y){        
>        i <- is.na(x[1:8700,1])
>        xx <- y[1:8700,1]             
>        new <- data.frame(xx=xx)       
>    x[1:8700,1][i] <- predict(lm(x[1:8700,1]~xx, na.action=na.exclude),
>new)[i]
>        x        
>    }
>
>My error message is: Error in model.frame.default(formula = x[1:8700,
>1] ~
>xx, na.action = na.exclude,  :  : invalid type (NULL) for variable 'xx'
>
>I tried to add in the function:  
>ifelse( all(is.null(xx))==TRUE,return(NA),xx)  or
>ifelse( all(is.null(xx))==TRUE,return(NULL),xx)
>
>but it still doesn't work.
>How can I write that in my function? With NA, NULL or in another way?
>Thank you very much for your answers
>
>
>--
>View this message in context:
>http://r.789695.n4.nabble.com/how-to-ignore-NA-with-NA-or-NULL-tp4632287.html
>Sent from the R help mailing list archive at Nabble.com.
>
>______________________________________________
>R-help at r-project.org 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.



More information about the R-help mailing list