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.