Here's another approach -- 'wrap' the problematic function in a safety-wrapper, so that it always returns some kind of value.
Here's the wrapper safetyWrapper <- function(FUN, .badValue=NA) function(...) tryCatch(FUN(...), error=function(err) .badValue) and the problmeatic function, stopping with probability 'prob': sometimeStopFunc <- function(i, prob) { if (runif(1) < prob) stop("stopped") else i } Here's the problematic function in action (using sapply to produce more compact output for email purposes) > sapply(1:20, sometimeStopFunc, prob=.2) Error in FUN(X[[2]], ...) : stopped We can wrap the troublesome function in our wrapper > neverStopFunc <- safetyWrapper(sometimeStopFunc) and then obtain results > sapply(1:20, neverStopFunc, prob=.2) [1] 1 2 3 NA 5 6 7 NA 9 NA NA 12 NA NA NA 16 17 NA 19 20 these could be filtered... > res <- sapply(1:20, neverStopFunc, prob=.2) > res[!is.na(res)] [1] 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 19 20 or a different type of result used to signal failure... > neverStopFunc <- safetyWrapper(sometimeStopFunc, .badValue=-1) > sapply(1:20, neverStopFunc, prob=.2) [1] 1 2 -1 4 5 6 7 8 -1 10 11 -1 -1 -1 -1 16 17 -1 19 20 Maybe it's possible to use restarts to do the calculation over again? Martin "Farrel Buchinsky" <[EMAIL PROTECTED]> writes: > "Berton Gunter" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] >> ?try >> >> as in >> >> result<- try (some R expression...) >> if (inherits(result,'try-error')) ...do something >> else ...do something else > > No heaven on earth yet. > > how would I incorporate this kind of functionality into > Resultdt<-lapply(PGWide[,240:389], tdt) > > everything would have to be built into the tdt spot in the above statement. > How does one get the if...else in there? Does one have to do that as one > would program a function or could one write the if...else right into > "Resultdt<-lapply(PGWide[,240:389], tdt)" > > This works >> for (few in c(9,10,11,12,243,20)) if >> (inherits(try(tdt(PGWide[,few])),'try-error')) print("messed up") else >> print("works") > [1] "works" > [1] "works" > [1] "works" > [1] "works" > Error in rep.default(1, nrow(U)) : rep() incorrect type for second argument > In addition: Warning messages: > 1: 1 misinheritances in: phase.resolve(g.cs, g.mr, g.fr, as.allele.pair = > TRUE, allow.ambiguous = (parent == > 2: 2 misinheritances in: phase.resolve(g.cs, g.mr, g.fr, as.allele.pair = > TRUE, allow.ambiguous = (parent == > 3: 2 misinheritances in: phase.resolve(g.cs, g.mr, g.fr, as.allele.pair = > TRUE, allow.ambiguous = (parent == > 4: 4 misinheritances in: phase.resolve(g.cs, g.mr, g.fr, as.allele.pair = > TRUE, allow.ambiguous = (parent == > [1] "messed up" > [1] "works" > Warning message: > 1 misinheritances in: phase.resolve(g.cs, g.mr, g.fr, as.allele.pair = TRUE, > allow.ambiguous = (parent == > > BUT THIS DOES NOT > > lapply(PGWide[,c(9,10,11,12,,243,20)], if (inherits(try(tdt),'try-error') > print("messed up") else print("works")) > Error: syntax error in "lapply(PGWide[,c(9,10,11,12,,243,20)], if > (inherits(try(tdt),'try-error') print" > > Any idea why...can it be that one cannot have multiple commands on one line >> p=7 f=8 > Error: syntax error in "p=7 f" > > in the lapply, how would R know that I was sending the list to tdt? > > > -- > Farrel Buchinsky, MD > Pediatric Otolaryngologist > Allegheny General Hospital > Pittsburgh, PA > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html