[R] Using tryCatch in a for loop
Bert Gunter
bgunter@4567 @end|ng |rom gm@||@com
Tue May 22 20:13:21 CEST 2018
Others may have greater insight, but my response is: Exactly what did or
didn't happen that makes you say the code didn't work? That is, what did or
didn't you get when you ran it compared to your expectations?
Cheers,
Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Tue, May 22, 2018 at 10:55 AM, Bailey Hewitt <bailster using hotmail.com>
wrote:
> Hello All,
>
> I have been trying to use a for loop to run segmented regressions (from R
> package segmented) on many columns of data in a data frame with the end
> goal of writing a new file with the following columns: column title,
> breakpoint year, slope, and difference in slope. Unfortunately, when one of
> the columns doesn't have a breakpoint the code stops and provides an error
> or warning. I would like the loop to keep running regardless of the
> error/warning but I want it to write that it did encounter an error or
> warning. Based on my needs I found that tryCatch appears to do what I need.
> I have looked at multiple examples, blogs, etc. as well as gone over the
> documentation and Hadley Wickham's document in Advanced R but I am still a
> novice when it comes to coding and I am having a hard time getting the code
> to work properly. Below is the code I have developed thus far (with a test
> dataset as an example):
>
> #Creating a test dataset
> Year<- c(2000, 2001, 2002, 2003, 2004)
> Lake1<- c(2, 4, 5, 2, 1)
> Lake2<- c(1, 3, -1, 4, -2)
> Lake3<- c(1, 2, 5, -3, 1)
> mydata<- data.frame(Year, Lake1, Lake2, Lake3)
>
> #Running a for loop that indicates when an error or warning occurs
> y<- mydata[,2:4]
> year <- mydata$Year
> regimeshift <- data.frame()
> for (i in 1:3){
> tryCatch({
> y.val <- y[,i]
> lin.reg <- lm(y.val~year, mydata)
> seg.reg <- segmented.lm(lin.reg, seg.Z = ~ year, psi = NA, control =
> seg.control(stop.if.error = FALSE, n.boot = 0, it.max = 20))
> RSyear <- summary(seg.reg)$psi [1,2]
> SlopeRegime1 <- summary(seg.reg)$coefficients[2,1]
> SlopeDiff <- summary(seg.reg)$coefficients[3,1]
> new.regimeshift <- data.frame(RSyear=RSyear,
> SlopeRegime1=SlopeRegime1, SlopeDiff=SlopeDiff)
> rownames(new.regimeshift) <- colnames(y)[i]
> regimeshift <- rbind(regimeshift,new.regimeshift)
> print(regimeshift)
> }, error= function(e) {cat("Error", "\n")},
> warning= function(w) {cat("Warning", "\n")})
> }
>
> Any ideas or suggestions you might have are greatly appreciated!
>
> Bailey Hewitt
> PhD Candidate
> York University
> Ontario, Canada
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list