Thanks very much again David for your helpful answers. However, the code STILL 
does not appear to be working properly!

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. 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
>>>> 
>>>> 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


      
        [[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