[R] help with tryCatch
Stephen Bond
sje at mast.queensu.ca
Thu Feb 15 21:50:56 CET 2007
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