>>>>> "RT" == Rolf Turner <[EMAIL PROTECTED]>
>>>>>     on Wed, 14 May 2008 13:12:02 +1200 writes:

    RT> I have written a function which reads data from files using read.delim 
    RT> ().
    RT> The names of these files are complicated and are built using arguments
    RT> to the wrapper function.  Since the files in question may or may not
    RT> exist, I thought to enclose the read.delim() call in a try():

    RT> file <- <complicated expression>
    RT> temp <- try(read.delim(file))
    RT> if(inherits(temp,"try-error")) {
    RT>   (Do something)
    RT> } else {
    RT>    (Do something else)
    RT> }

    RT> But this doesn't work.  If file doesn't exist, then I get an error,

You get an error *message* but not an error, I'd think.

If you don't like the error *message* in this case, use

 try(..., silent=TRUE)

In R,  try() is now using tryCatch(), (type 'try' to see) 
and I would nowadays recommend using tryCatch() inside any function.
Another "advantage" of tryCatch(.) for you is that you can
decide yourself what to do with the error message.

The most simple thing would be something like

          if(is.null(tryCatch(temp <- read.delim(file),
                              error = function(e) NULL))) {
             ## error reading ...                                     
          } else {
             ## work with the 'temp' data frame
          }

Slightly more sophisticated

          temp <- tryCatch(read.delim(file), error = function(e) e)
          if(inherits(e, "error") {
             message("Caught error:", [EMAIL PROTECTED], "\n")
             ## error reading ...                                     
          } else {
             ## work with the 'temp' data frame
          }


*However*, there's a small infelicity in the above:

You get an additional warning from file(..)  which you need to
suppress by another  suppressWarnings( ..... ) 
around the call.

Martin

    RT> and the wrapper function terminates, despite the presence of the try().
    RT> The object ``temp'' never gets created.

    RT> I can of course easily get around the problem by testing with

    RT> file.exists(file)

    RT> I just wondered --- why isn't try() working as expected here?  Am I  
    RT> being
    RT> silly to expect it to work?  If so, what am I not understanding about  
    RT> try()?

    RT> Thanks for any insights.

    RT> cheers,

    RT> Rolf

    RT> ######################################################################
    RT> Attention:\ This e-mail message is privileged and confid...{{dropped:9}}

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

______________________________________________
R-help@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.

Reply via email to