Instead of "someClass" %in% class(someThing), as in > function(x) if( "try-error" %in% > class( try( test[test[x:1]] ) ) ){ > 2}else{0} it is better to use inherits(someThing, "someClass"), as in function(x) { res <- try( test[test[x:1]], silent=TRUE ) if (inherits(res, "try-error")) { NA } else { res }} (where I return the result of the attempted operation instead of 2 and NA for an error instead of 0.)
A related approach is to use tryCatch(): function(x) tryCatch(test[test[x:1]], error=function(e)NA) You can also catch warnings and messages with tryCatch. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of David Winsemius > Sent: Tuesday, September 18, 2012 5:35 PM > To: John Sorkin > Cc: r-help@r-project.org > Subject: Re: [R] Trap an error from a function > > > On Sep 18, 2012, at 5:10 PM, John Sorkin wrote: > > > Window 7 > > R 2.15 > > > > I am writing a simulation which generates sample sized estimates from > > simulated data. > When I run the function shown below, > > power.t.test(delta=14.02528,sd=1.945226,power=0.8,sig.level=0.05) > > > > I get an error message: > > > >> power.t.test(delta=14.02528,sd=1.945226,power=0.8,sig.level=0.05) > > Error in uniroot(function(n) eval(p.body) - power, c(2, 1e+07)) : > > f() values at end points not of opposite sign > > > > The fact that the function can not return a sample size is OK, however I > > need to trap > the error and set the sample size equal to NA. How do I trap the error so > that when the > error occurs I can set sample size equal to NA? > > ?conditions #### has lots of fancy stuff > # But I use just plain old `try` > > test=-10:10 > sapply(test, function(x) if( "try-error" %in% > class( try( test[test[x:1]] ) ) ){ > 2}else{0} ) > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > Error in test[x:1] : only 0's may be mixed with negative subscripts > [1] 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 > > You still get the messages but the code runs. > > -- > > David Winsemius, MD > Alameda, CA, USA > > ______________________________________________ > 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. ______________________________________________ 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.