Skip to content
Prev 374729 / 398513 Next

Using tryCatch in a for loop

Hi Dan,

Thank you for trying this out! I have been able to use the segmented.lm code outside of the loop effectively. When it gave you the first warning: No breakpoint estimated, that is what I would expect it to do, and since  there is no breakpoint there aren't any variables in seg.reg. What I would like to have happen is that when I get this warning, I want it to be caught by tryCatch and write "warning" in the matrix, and the loop should continue on. Is there a way to manipulate the code for this or something similar?to happen?

Bert, you are right! My apologies, I did mean to reply all!

Thanks!

Bailey




From: Daniel Nordlund <djnordlund at gmail.com>
Sent: May 22, 2018 3:06 PM
To: Bailey Hewitt; Bert Gunter
Cc: r-help at R-project.org
Subject: Re: [R] 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