[R] Help with tryCatch with a for loop

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Wed Nov 9 22:38:27 CET 2011

Without a sample data set that fails the first pass and succeeds on the second pass this is a pain to test.

Don't forget to read the posting guide... Reproducible sample code isn't too reproducible without some specified data or autogenerated data.
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
Sent from my phone. Please excuse my brevity.

Spencer S <scheidt14 at gmail.com> wrote:

>Hello all,
>I'm a beginner in R working on a script that will produce a set of
>(linear, polynomial and logistic) for each location in a dataset. 
>the self-starting logistic model often fails - if this happens I would
>to just skip to the next iteration of the loop using tryCatch.  
>I've looked at a few examples and read the help file, but didn't
>tryCatch in the context of my script.  Any help or suggestions (even
>me where to insert the tryCatch command) would be much appreciated!!
>Below is the script I am currently working on:
>#File name is cbc.subset
>data$location.code = as.character(data$location.code)
>locs = unique(location.code)
>pdf("mygraphs.pdf",height=8, width=10)
>for(s in 1:length(locs)){
>  #To plot data from a particular stateroute:
>  sub.ECDO<-data[data$location.code == locs[s],]
>  plot(abund~year, data=sub.ECDO, main=locs[s])
>  #To plot the linear model for the specified location:
>  lmodel<-lm(abund~year, data=sub.ECDO)
>  abline(lmodel$coefficients[1],lmodel$coefficients[2],lty=2)
>  #To plot the polynomial model for the specified location:
>  polymodel<-lm(abund~year+I(year^2), data=sub.ECDO)
>  xv<-seq(min(sub.ECDO$year),max(sub.ECDO$year),0.1)
>  yv<-predict(polymodel,list(year=xv))
>  lines(xv,yv)
>  #To plot the logistic model
>  #####tryCatch
>  logis<-nls(abund~SSlogis(year,a,b,c),data=sub.ECDO)
>  yv<-predict(logis,list(year=xv))
>  lines(xv,yv)
>  #To find which model is the best fit:
>  if ("logis" %in% ls()) {
>    AIC.results = AIC(lmodel,polymodel,logis)
>  } else {
>    AIC.results = AIC(lmodel,polymodel)
>  }
>  #Add text to plot
>  text(min(sub.ECDO$year)+2,0.9*max(sub.ECDO$abund),paste("linear =
>",AIC.results[1,2],"\npolynomial = ",AIC.results[2,2],"\nlogistic =
>  rm(logis)
>  rm(polymodel)
>  rm(lmodel)
>Thank you!
>View this message in context:
>Sent from the R help mailing list archive at Nabble.com.
>R-help at r-project.org mailing list
>PLEASE do read the posting guide
>and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list