You are right -- I made a typo. When I fix my code to go through the loop three 
times, it works like a charm. THANK YOU!

For the benefit of the listserv, here is the full (WORKING) code:

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)
 
closeAllConnections()
 
results <- matrix(nrow = 1, ncol = 3)
colnames(results) <- c("y1", "y2", "y3")
 
require(rms)  # or Design
for (i in 1:3) {
    mod.poly3 <- try(lrm(x[,i] ~ pol(x1, 3) + pol(x2, 3), data=x), silent=TRUE)
   if(class(mod.poly3)[1] != 'try-error')
       {results[1,i] <- anova(mod.poly3)[1,3]}
 
}

Then, when you look at the matrix called "results", everything is there (except 
for y2, which is supposed to fail):
results
            y1 y2        y3
[1,] 0.6976063 NA 0.6976063





________________________________
From: David Winsemius <dwinsem...@comcast.net>

Cc: R Help <r-help@r-project.org>
Sent: Sun, July 18, 2010 9:12:44 PM
Subject: Re: [R] Continuing on with a loop when there's a failure


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

> Thanks very much again David for your helpful answers. However, the code 
> STILL 
[[elided Yahoo spam]]
> 
> Even though the third time through the loop *should* work, it appears that R 
>has given up after the second time through the loop. What I mean is: although 
>y2 
>causes the lrm function to fail, y3 is a kosher variable. If the loop 
>continues 
>on, it should give data for the model with y3.

Right, but your loop index only went to 2!!! Your design, not mine.

--David.


> But if you look at the matrix called "results", it returns NA for the third 
>spot corresponding to the model of y3:
> 
> >results
>             y1 y2 y3
> [1,] 0.6976063 NA NA
> 
> If you run y3 in isolation, rather than through the loop, you can see that it 
>should work and contribute data to the matrix called "results":
> 
> >mod.poly3 <- lrm(x[,3] ~ pol(x1, 3) + pol(x2, 3), data=x)
> >anova(mod.poly3)[1,3]
> [1] 0.6976063
> 
> Any ideas?
> 
> From: David Winsemius <dwinsem...@comcast.net>

> Cc: Peter Konings <peter.l.e.koni...@gmail.com>; R Help <r-help@r-project.org>
> Sent: Sun, July 18, 2010 3:33:07 PM
> Subject: Re: [R] Continuing on with a loop when there's a failure
> 
> 
> On Jul 18, 2010, at 4:25 AM, Josh B wrote:
> 
> > Hello Peter,
> >
> > I tried your suggestion, but I was still not able to get it to work. Would 
>you
> > mind looking at my code again? Here's what I'm trying:
> >
> > 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)
> 
> closeAllConnections()
> 
> >
> > results <- matrix(nrow = 1, ncol = 3)
> > colnames(results) <- c("y1", "y2", "y3")
> 
> require(rms)  # or Design
> for (i in 1:2) {
>   mod.poly3 <- try(lrm(x[,i] ~ pol(x1, 3) + pol(x2, 3), data=x), silent=TRUE)
>   if(class(mod.poly3)[1] != 'try-error')
>       {results[1,i] <- anova(mod.poly3)[1,3]}
> 
> }
> 
> > results
>             y1 y2 y3
> [1,] 0.6976063 NA NA
> 
> >
> >
> > ...and here's the output:
> >
> >> results
> >    y1 y2 y3
> > [1,] NA NA NA
> >
[[elided Yahoo spam]]
> >
> >
> >
> > ________________________________
> > From: Peter Konings <peter.l.e.koni...@gmail.com>
> >
> > Sent: Tue, July 13, 2010 5:45:17 PM
> > Subject: Re: [R] Continuing on with a loop when there's a failure
> >
> > Hi Josh,
> >
> > Test the class of the resulting object. If it is 'try-error' fill your 
result
> > with NA or do some other error handling.
> >
> > result <- try(somemodel)
> > if(class(result) == 'try-error')
> > {
> > # some error handling
> > } else {
> > # whatever happens if the result is ok
> > }
> >
> > HTH
> > Peter.
> >
> >
> >
> >
> > In my opinion the try and tryCatch commands are written and documented 
rather
> >> poorly. Thus I am not sure what to program exactly.
> >>
> >> For instance, I could query mod.poly3 and use an if/then statement to 
>proceed,
> >> but querying mod.poly3 is weird. For instance, here's the output when it 
>fails:
> >>
> >>> mod.poly3 <- try(lrm(x[,2] ~ pol(x1, 3) + pol(x2, 3), data=x))
> >>
> >> Error in fitter(X, Y, penalty.matrix = penalty.matrix, tol = tol, weights =
> >> weights,  :
> >>
> >> NA/NaN/Inf in foreign function call (arg 1)
> >>> mod.poly3
> >> [1] "Error in fitter(X, Y, penalty.matrix = penalty.matrix, tol = tol, 
>weights
> > =
> >> weights,  : \n  NA/NaN/Inf in foreign function call (arg 1)\n"
> >> attr(,"class")
> >> [1] "try-error"
> >>
> >> ...and here's the output when it succeeds:
> >>> mod.poly3 <- try(lrm(x[,1] ~ pol(x1, 3) + pol(x2, 3), data=x))
> >>> mod.poly3
> >>
> >> Logistic Regression Model
> >>
> >> lrm(formula = x[, 1] ~ pol(x1, 3) + pol(x2, 3), data = x)
> >>
> >>
> >> Frequencies of Responses
> >> bagels donuts
> >>  10      5
> >>
> >>    Obs  Max Deriv Model L.R.      d.f.          P          C
> >>      15      4e-04      3.37          6    0.7616      0.76
> >>    Dxy      Gamma      Tau-a        R2      Brier          g
> >>    0.52      0.52      0.248      0.279      0.183      1.411
> >>      gr        gp
> >>    4.1      0.261
> >>
> >>        Coef    S.E.    Wald Z P
> >> Intercept -5.68583 5.23295 -1.09  0.2772
> >> x1        1.87020 2.14635  0.87  0.3836
> >> x1^2      -0.42494 0.48286 -0.88  0.3788
> >> x1^3      0.02845 0.03120  0.91  0.3618
> >> x2        3.49560 3.54796  0.99  0.3245
> >> x2^2      -0.94888 0.82067 -1.16  0.2476
> >> x2^3      0.06362 0.05098  1.25  0.2121
> >>
> >> ...so what exactly would I query to design my if/then statement?
> >>
> >>
> >>
> >>
> >> ________________________________
> >>
> >> From: David Winsemius <dwinsem...@comcast.net>
> >> To: David Winsemius <dwinsem...@comcast.net>
> >>
> >> Sent: Tue, July 13, 2010 9:09:04 AM
> >>
> >> Subject: Re: [R] Continuing on with a loop when there's a failure
> >>
> >>
> >>
> >> On Jul 13, 2010, at 9:04 AM, David Winsemius wrote:
> >>
> >>>
> >>> On Jul 13, 2010, at 8:47 AM, Josh B wrote:
> >>>
> >>>> Thanks again, David.
> >>>>
> >> [[elided Yahoo spam]]
> >>
> >>
> >> (BTW, it did work.)
> >>
> >>>> Here's what I'm trying now:
> >>>>
> >>>> for (i in 1:2) {
> >>>>  mod.poly3 <- try(lrm(x[,i] ~ pol(x1, 3) + pol(x2, 3), data=x))
> >>>>  results[1,i] <- anova(mod.poly3)[1,3]
> >>>> }
> >>>
> >>> You need to do some programming.
> >>
> >> (Or I suppose you could wrap both the lrm and the anova calls in try.)
> >>
> >>> You did not get an error from the lrm but rather from the anova call 
>because
> >>> you tried to give the results of the try function to anova without first
> >>> checking to see if an error had occurred.
> >>>
> >>> --David.
> >>>>
> >>>> Here's what happens (from the console):
> >>>>
> >>>> Error in fitter(X, Y, penalty.matrix = penalty.matrix, tol = tol, 
> >>>> weights 
>=
> >>>> weights,  :
> >>>> NA/NaN/Inf in foreign function call (arg 1)
> >>>> Error in UseMethod("anova") :
> >>>> no applicable method for 'anova' applied to an object of class 
"try-error"
> >>>>
> >>>> ...so I still can't make my results matrix. Could I ask you for some
> > specific
> >>>> code to make this work? I'm not that familiar with the syntax for try or
> >>>> tryCatch, and the help files for them are pretty bad, in my humble 
>opinion.
> >>>>
> >>>> I should clarify that I actually don't care about the failed runs per 
> >>>> se. 
>I
> >>>> just want R to keep going in spite of them and give me my results matrix.
> >>>>
> >>>> From: David Winsemius <dwinsem...@comcast.net>
> >>
> >>
> >>>> Cc: R Help <r-help@r-project.org>
> >>>> Sent: Mon, July 12, 2010 8:09:03 PM
> >>>> Subject: Re: [R] Continuing on with a loop when there's a failure
> >>>>
> >>>>
> >>>> 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
>
> >>>>
> >>>> f
> >>>>
> >>>> (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
> >> [[elided Yahoo spam]]
> >>
> >>>>
> >>>> --
> >>>> David Winsemius, MD
> >>>> West Hartford, CT
> >>>>
> >>>>
> >>>>
> >>>
> >>> David Winsemius, MD
> >>> West Hartford, CT
> >>>
> >>> ______________________________________________
> >>> R-help@r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>> PLEASE do read the posting guide 
>http://www.R-project.org/posting-guide.html
> >>> and provide commented, minimal, self-contained, reproducible code.
> >>
> >> David Winsemius, MD
> >> West Hartford, CT
> >>
> >>
> >>
> >>
> >      [[alternative HTML version deleted]]
> >>
> >>
> >> ______________________________________________
> >> R-help@r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >>
> >
> >
> >
> >
> >     [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> 
> David Winsemius, MD
> West Hartford, CT
> 
> 
> 

David Winsemius, MD
West Hartford, CT


      
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to