[Rd] Build a R call at C level

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Tue Jun 30 13:35:59 CEST 2020


On 6/30/20 1:06 PM, Jan Gorecki wrote:
> It is quite known that R documentation on R C api could be improved...

Please see "5.11 Evaluating R expressions from C" from "Writing R 
Extensions"

Best
Tomas

> Still R-package-devel mailing list should be preferred for this kind
> of questions.
> Not sure if that is the best way, but works.
>
> call_to_sum <- inline::cfunction(
>    language = "C",
>    sig = c(x = "SEXP"), body = "
>
> SEXP e = PROTECT(lang2(install(\"sum\"), x));
> SEXP r_true = PROTECT(CONS(ScalarLogical(1), R_NilValue));
> SETCDR(CDR(e), r_true);
> SET_TAG(CDDR(e), install(\"na.rm\"));
> Rf_PrintValue(e);
> SEXP ans = PROTECT(eval(e, R_GlobalEnv));
> UNPROTECT(3);
> return ans;
>
> ")
>
> call_to_sum(c(1L,NA,3L))
>
> On Tue, Jun 30, 2020 at 10:08 AM Morgan Morgan
> <morgan.emailbox using gmail.com> wrote:
>> Hi All,
>>
>> I was reading the R extension manual section 5.11 ( Evaluating R expression
>> from C) and I tried to build a simple call to the sum function. Please see
>> below.
>>
>> call_to_sum <- inline::cfunction(
>>    language = "C",
>>    sig = c(x = "SEXP"), body = "
>>
>> SEXP e = PROTECT(lang2(install(\"sum\"), x));
>> SEXP ans = PROTECT(eval(e, R_GlobalEnv));
>> UNPROTECT(2);
>> return ans;
>>
>> ")
>>
>> call_to_sum(1:3)
>>
>> The above works. My question is how do I add the argument "na.rm=TRUE" at C
>> level to the above call? I have tried various things based on what is in
>> section 5.11 but I did not manage to get it to work.
>>
>> Thank you
>> Best regards
>>
>>          [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list