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]]
It is quite known that R documentation on R C api could be improved... 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 at 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 at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
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 at 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 at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel