Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to tell lapply to ignore an error and process the next thing in the list?

I have an example function below that reads in a date as a string and returns it as a date object. If it reads a string that it cannot convert to a date, it returns an error.

testFunction <- function (date_in) {     return(as.Date(date_in))     }  testFunction("2010-04-06")  # this works fine testFunction("foo")  # this returns an error 

Now, I want to use lapply and apply this function over a list of dates:

dates1 = c("2010-04-06", "2010-04-07", "2010-04-08") lapply(dates1, testFunction)  # this works fine 

But if I want to apply the function over a list when one string in the middle of two good dates returns an error, what is the best way to deal with this?

dates2 = c("2010-04-06", "foo", "2010-04-08") lapply(dates2, testFunction) 

I presume that I want a try catch in there, but is there a way to catch the error for the "foo" string whilst asking lapply to continue and read the third date?

like image 944
John Avatar asked Apr 07 '10 00:04

John


1 Answers

Use a tryCatch expression around the function that can throw the error message:

testFunction <- function (date_in) {   return(tryCatch(as.Date(date_in), error=function(e) NULL)) } 

The nice thing about the tryCatch function is that you can decide what to do in the case of an error (in this case, return NULL).

> lapply(dates2, testFunction) [[1]] [1] "2010-04-06"  [[2]] NULL  [[3]] [1] "2010-04-08" 
like image 153
Shane Avatar answered Sep 30 '22 07:09

Shane