[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