[R] Continuing on with a loop when there's a failure

David Winsemius dwinsemius at comcast.net
Tue Jul 13 02:09:03 CEST 2010


On Jul 12, 2010, at 6:18 PM, Josh B wrote:

> Hi R sages,
>
> Here is my latest problem. Consider the following toy example:
>
> x <- read.table(textConnection("y1 y2 y3 x1 x2
> indv.1 bagels donuts bagels 4 6
> indv.2 donuts donuts donuts 5 1
> indv.3 donuts donuts donuts 1 10
> indv.4 donuts donuts donuts 10 9
> indv.5 bagels donuts bagels 0 2
> indv.6 bagels donuts bagels 2 9
> indv.7 bagels donuts bagels 8 5
> indv.8 bagels donuts bagels 4 1
> indv.9 donuts donuts donuts 3 3
> indv.10 bagels donuts bagels 5 9
> indv.11 bagels donuts bagels 9 10
> indv.12 bagels donuts bagels 3 1
> indv.13 donuts donuts donuts 7 10
> indv.14 bagels donuts bagels 2 10
> indv.15 bagels donuts bagels 9 6"), header = TRUE)
>
> I want to fit a logistic regression of y1 on x1 and x2. Then I want  
> to run a
> logistic regression of y2 on x1 and x2. Then I want to run a  
> logistic regression
> of y3 on x1 and x2. In reality I have many more Y columns than  
> simply "y1,"
> "y2," and "y3," so I must design a loop. Notice that y2 is invariant  
> and thus it
> will fail. In reality, some y columns will fail for much more subtle  
> reasons.
> Simply screening my data to eliminate invariant columns will not  
> eliminate the
> problem.
>
> What I want to do is output a piece of the results from each run of  
> the loop to
> a matrix. I want the to try each of my y columns, and not give up  
> and stop
> running simply because a particular y column is bad. I want it to  
> give me "NA"
> or something similar in my results matrix for the bad y columns, but  
> I want it
> to keep going give me good data for the good y columns.
>
> For instance:
> results <- matrix(nrow = 1, ncol = 3)
> colnames(results) <- c("y1", "y2", "y3")
>
> for (i in 1:2) {
> mod.poly3 <- lrm(x[,i] ~ pol(x1, 3) + pol(x2, 3), data=x)
> results[1,i] <- anova(mod.poly3)[1,3]
> }
>
> If I run this code, it gives up when fitting y2 because the y2 is  
> bad. It
> doesn't even try to fit y3. Here's what my console shows:
>
>> results
>            y1 y2 y3
> [1,] 0.6976063 NA NA
>
> As you can see, it gave up before fitting y3, which would have worked.
>
> How do I force my code to keep going through the loop, despite the  
> rotten apples
> it encounters along the way?

?try

http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-capture-or-ignore-errors-in-a-long-simulation_003f

(Doesn't only apply to simulations.)

> Exact code that gets the job done is what I am
> interested in. I am a post-doc -- I am not taking any classes. I  
> promise this is
> not a homework assignment!

-- 

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list