[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