[R] help with tryCatch

Henrik Bengtsson hb at stat.berkeley.edu
Thu Feb 15 23:27:07 CET 2007


Note that the error catch is calling your locally defined function.
Like anywhere in R, if you assign something to a variable inside a
function, it only applies there and not "outside".  The quick a dirty
fix is to do:

 err <<- c(err, er)

/H

On 2/15/07, Stephen Bond <sje at mast.queensu.ca> wrote:
> Henrik,
> Please, stay with me.
> there is a problem with the way tryCatch processes statements and that
> is exactly what the help file does not describe at all. I am trying
>
> ************************
> catch=function(vec){
>   ans=NULL;err=NULL;
>   for (i in vec) {
>   tryCatch({
>       source(i);
>       ans=c(ans,i);
>       cat(ans," from try");
>   },
>   error=function(er){
>     cat(i," from catch\n");
>     err=c(err,i);
>
>   }
>            )
>
> }
>   ret=list(ans=ans,err=err)
>   ret
> }
>
> v=c("gdhfdh","hdhdfjh")  #non-existent files
> ret=catch(v)  # err is NULL and none of the statements in that block is
> executed ??
>
> below is a Java example that executes the catch block as it should. How
> can I achieve the same in R?
> ***************************
> import java.io.FileReader;
> import java.io.FileWriter;
> import java.io.IOException;
> import java.util.Vector;
>
> public class ReadFiles {
>
>     public static void main(String[] args) {
>         String[] files={"asdf","qwert"};
>         Vector err=new Vector();
>         FileReader inputStream = null;
>         for (int j=0;j<2;j++){
>             try {
>                 inputStream = new FileReader(files[j]);
>                 int c;
>                 while ((c = inputStream.read()) != -1) {}
>             } catch(IOException e){
>                 err.add(j,files[j]); // this statement executes!
>             } finally {
>                 if (inputStream != null) {
>                     inputStream.close(); // IO not encapsulated here,
> but declared in "main throws". pls ignore since "source(arg)" in R takes
> care of closing.
>                 }
>             }
>         }
>         for (Object j:err){
>         System.out.println(j);
>     }
>     }
> }
>
>
>
>
>
>
>
>
>
> Henrik Bengtsson wrote:
>
> > To be more precise, put the tryCatch() only around the code causing
> > the problem, i.e. around source().  /H
> >
> > On 2/13/07, Henrik Bengtsson <hb at stat.berkeley.edu> wrote:
> >
> >> Put the for loop outside the tryCatch(). /H
> >>
> >> On 2/13/07, Stephen Bond <sje at mast.queensu.ca> wrote:
> >> > Henrik,
> >> >
> >> > thank you for the reference. Can you please tell me why the following
> >> > does not work?
> >> >
> >> > vec=c("hdfhjfd","jdhfhjfg")    # non-existent file names
> >> > catch=function(vec){
> >> >   tryCatch({
> >> >     ans =NULL;err=NULL;
> >> >     for (i in vec) {
> >> >       source(i)
> >> >       ans=c(ans,i)
> >> >     }
> >> >   },
> >> >   interrupt=function(ex){print(ex)},
> >> >   error=function(er){
> >> >      print(er)
> >> >      cat(i,"\n")
> >> >      err=c(err,i)
> >> >   },
> >> >   finally={
> >> >     cat("finish")
> >> >   }
> >> >  ) #tryCatch
> >> > }
> >> >
> >> > catch(vec) # throws an error after the first file and stops there
> >> while
> >> > I want it to go through the list and accumulate the nonexistent
> >> > filenames in err.
> >> >
> >> > Thank you
> >> > Stephen
> >> >
> >> > Henrik Bengtsson wrote:
> >> >
> >> > > Hi,
> >> > >
> >> > > google "R tryCatch example" and you'll find:
> >> > >
> >> > >  http://www.maths.lth.se/help/R/ExceptionHandlingInR/
> >> > >
> >> > > Hope this helps
> >> > >
> >> > > Henrik
> >> > >
> >> > > On 2/13/07, Stephen Bond <sje at mast.queensu.ca> wrote:
> >> > >
> >> > >> Henrik,
> >> > >>
> >> > >> I had looked at tryCatch before posting the question and asked the
> >> > >> question because the help file was not adequate for me. Could
> >> you pls
> >> > >> provide a sample code of
> >> > >> try{ try code}
> >> > >> catch(error){catch code}
> >> > >>
> >> > >> let's say you have a vector of local file names and want to
> >> source them
> >> > >> encapsulating in a tryCatch to avoid the skipping of all good
> >> file names
> >> > >> after a bad file name.
> >> > >>
> >> > >> thank you
> >> > >> stephen
> >> > >>
> >> > >>
> >> > >> Henrik Bengtsson wrote:
> >> > >>
> >> > >> > See ?tryCatch. /Henrik
> >> > >> >
> >> > >> > On 2/12/07, Stephen Bond <sje at mast.queensu.ca> wrote:
> >> > >> >
> >> > >> >> Could smb please help with try-catch encapsulating a function
> >> for
> >> > >> >> downloading. Let's say I have a character vector of symbols and
> >> > >> want to
> >> > >> >> download each one and surround by try and catch to be safe
> >> > >> >>
> >> > >> >> # get.hist.quote() is in library(tseries), but the question
> >> does not
> >> > >> >> depend on it, I could be sourcing local files instead
> >> > >> >>
> >> > >> >> ans=null;error=null;
> >> > >> >> for ( sym in sym.vec){
> >> > >> >> try(ans=cbind(ans,get.hist.quote(sym,start=start)))
> >> #accumulate in
> >> > >> a zoo
> >> > >> >> matrix
> >> > >> >> catch(theurlerror){error=c(error,sym)} #accumulate failed
> >> symbols
> >> > >> >> }
> >> > >> >>
> >> > >> >> I know the code above does not work, but it conveys the idea.
> >> > >> tryCatch
> >> > >> >> help page says it is similar to Java try-catch, but I know
> >> how to
> >> > >> do a
> >> > >> >> try-catch in Java and still can't do it in R.
> >> > >> >>
> >> > >> >> Thank you very much.
> >> > >> >> stephen
> >> > >> >>
> >> > >> >> ______________________________________________
> >> > >> >> R-help at stat.math.ethz.ch 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