[R] Trap an error from a function

Peter Langfelder peter.langfelder at gmail.com
Wed Sep 19 02:57:57 CEST 2012


On Tue, Sep 18, 2012 at 5:35 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> 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.

Just to add - if the messages bother you (they would bother me since
normally an error message indicates the function aborted), you can add
argument silent = TRUE to the try() call.

Peter




More information about the R-help mailing list