[Rcpp-devel] How to set a default value when call a R function in Rcpp

Jingyu He jingyu.he at chicagobooth.edu
Fri Nov 11 23:46:16 CET 2016


It works, thanks a lot!
Qiang Kou <qkou at umail.iu.edu>于2016年11月11日 周五09:07写道:

> Hi, Jingyu,
>
> I post a small example below. I think this is what you want.
>
> Best,
>
> KK
>
> #include <Rcpp.h>
>
> using namespace Rcpp;
>
> //[[Rcpp::export]]
> void test(Nullable<Function> f = R_NilValue) {
>   if (f.isNotNull()) {
>     Rcpp::Rcout << "Not NULL fun" << std::endl;
>     Function f2(f);
>     f2();
>   } else {
>     Rcout << "NULL fun" << std::endl;
>   }
> }
>
> /* R code
> > Rcpp::sourceCpp("test.cpp")
> > f_test <- function() {
> + print("test fun")
> + }
> > test(f_test)
> Not NULL fun
> [1] "test fun"
> > test()
> NULL fun
> */
>
>
>
>
> On Fri, Nov 11, 2016 at 7:18 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
>
> On 11 November 2016 at 05:53, Jingyu He wrote:
> | I've deleted the post on StackOverflow. Sorry for the ambiguity, the
> problem is
> | not arg, but the Function f.
> |
> |
> | #include <Rcpp.h>
> | using namespace Rcpp;
> | // [[Rcpp::export]]
> | RObject cppfunction(Function rfunction = NULL) {
> |       if( rfunction == NULL){
> |       cout << 1 + 1 << endl;  // if we don't pass rfunction to
> cppfunction, run
> | something not related to rfunction()
> |       }else{
> |      rfunction()  // if we pass rfunction to cppfunction, run it
> |       }
> | }
> |
> | rfunction is an argument of cppfunction. Sometimes I need to pass
> rfunction to
> | cppfunction sometimes not. So I need to set a default rfunction
> (something like
> | NULL indicating not passing it).
> |
> | But
> |    RObject cppfunction(Function rfunction = NULL)
> | doesn't work. How can I make it?
>
> Well that is a different question :) But it has a nice answer: use
>
>    Rcpp::Nullable<Rcpp::Function> rfunction
>
> and test via
>
>    if (rfunction.isNull())
>
> (Untested, but should work)
>
> Dirk
>
> --
> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
>
>
>
> --
> Qiang Kou
> qkou at umail.iu.edu
> School of Informatics and Computing, Indiana University
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20161111/21ed163b/attachment.html>


More information about the Rcpp-devel mailing list