Skip to content
Prev 374728 / 398513 Next

Using tryCatch in a for loop

On 5/22/2018 11:32 AM, Bailey Hewitt wrote:
My suggestion is that you get your code to work on a single iteration 
before running in a loop and wrapping the code in tryCatch

I ran your "set-up" code (before the loop).  then extracted your code 
from the loop, set i <- 1, and then ran the code.  Here is what I got:

 > i <- 1
 >     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))
Warning message:
No breakpoint estimated
 >     RSyear <- summary(seg.reg)$psi [1,2]
 >     SlopeRegime1 <- summary(seg.reg)$coefficients[2,1]
 >     SlopeDiff <- summary(seg.reg)$coefficients[3,1]
Error in summary(seg.reg)$coefficients[3, 1] : subscript out of bounds
 >     new.regimeshift <- data.frame(RSyear=RSyear, 
SlopeRegime1=SlopeRegime1, SlopeDiff=SlopeDiff)
Error in data.frame(RSyear = RSyear, SlopeRegime1 = SlopeRegime1, 
SlopeDiff = SlopeDiff) :
   object 'SlopeDiff' not found
 >     rownames(new.regimeshift) <- colnames(y)[i]
Error in rownames(new.regimeshift) <- colnames(y)[i] :
   object 'new.regimeshift' not found
 >     regimeshift <- rbind(regimeshift,new.regimeshift)
Error in rbind(regimeshift, new.regimeshift) :
   object 'new.regimeshift' not found
 >     print(regimeshift)

the immediate problems that show up are
1.  there is no variable psi the summary(seg.reg) object (RSyear is NULL).
2.  the coefficients[] matrix in the summary(seg.reg) object does not 
have 3 rows, so you get an error and SlopeDiff is not created.

You need to correct these problems, and any others, so that your code 
runs correctly when there are no data problems.  Then you can worry 
about trapping errors in the case where there are data problems.

Hope this is helpful,

Dan