[R] Using tryCatch in a for loop

Bailey Hewitt b@il@ter @ending from hotm@il@com
Tue May 22 19:55:37 CEST 2018


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


More information about the R-help mailing list