[Rcpp-devel] Raise a condition

Tim Keitt tkeitt at utexas.edu
Thu Jun 19 00:30:41 CEST 2014


On Wed, Jun 18, 2014 at 5:22 PM, Romain Francois <romain at r-enthusiasts.com>
wrote:

> Le 19 juin 2014 à 00:15, Tim Keitt <tkeitt at utexas.edu> a écrit :
>
>
>
> On Wed, Jun 18, 2014 at 5:07 PM, Romain Francois <romain at r-enthusiasts.com
> > wrote:
>
>> Le 18 juin 2014 à 23:54, Tim Keitt <tkeitt at utexas.edu> a écrit :
>>
>>
>> I'd like to raise a condition other than error or warning. Is that
>> possible using the Rcpp api? I assume this can be done via R internals, but
>> I'd prefer not to call error() directly (or is that the recommendation?).
>>
>> THK
>>
>>
>> Definitely not. Rf_error should really only be called from C code. If you
>> call it from C++, there is a great chance you'll lose determinism as
>> destructors for your c++ objects are very likely not to be called. Most of
>> the time, it will just mean you'll never release some objects to the
>> garbage collector, but it could also get you leaks or other nice stuff
>> depending on what your destructors were supposed to do and did not get a
>> chance to do.
>>
>
> That was my understanding. Just wanted to be sure it was still the case.
>
>
>>
>> I'm not sure Rcpp has a way to raise an R condition apart from calling
>> stop, which usually is good enough. Otherwise, you can borrow from Rcpp11
>> and adapt some code from
>> https://github.com/Rcpp11/Rcpp11/blob/450aade7338c16c34618ad0916003e8ca4fb58a6/inst/include/Rcpp/Condition.h
>>
>
> Ah. I see. Eval "stop" in the global env with the condition as the
> argument. Clever.
>
>
> It is more of a hack due to lack of proper api from R.
>
> If you do this, make sure you don't have any c++ object in scope.
> Essentially that means you would evaluate `stop( condition )` in a top
> level catch block.
>

Rcpp objects are I assume ok however.

I will try "signalCondition" and see what happens.

THK


-- 
http://www.keittlab.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20140618/5e246604/attachment.html>


More information about the Rcpp-devel mailing list