Skip to content
Back to formatted view

Raw Message

Message-ID: <CA+hbrhX7q1ELqfDtKtLytbhvOAMLBBxhC22pQxgR6sjv1Haurw@mail.gmail.com>
Date: 2012-09-19T00:57:57Z
From: Peter Langfelder
Subject: Trap an error from a function
In-Reply-To: <09285089-FCBC-479C-A291-37D96A4CF7AA@comcast.net>

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