Question

What is the difference between Rcpp::InternalFunction and LOAD_RCPP_MODULE in the context of using RInside? They seem to have the same purpose just LOAD_RCPP_MODULE has an extra layer. What are the use cases for both of them and when should i prefer one over the other?

//example with LOAD_RCPP_MODULE
const char* hello( std::string who ){
    std::string result( "hello " ) ;
    result += who ;
    return result.c_str() ;
} 

RCPP_MODULE(bling){
    using namespace Rcpp ;
    function( "hello", &hello );
}

R["bling"] = LOAD_RCPP_MODULE(bling);

Here is the other example

//example with Rcpp::InternalFunction
  const char* hello( std::string who ){
        std::string result( "hello " ) ;
        result += who ;
        return result.c_str() ;
    } 

R["hello"] = Rcpp::InternalFunction( &hello )
Was it helpful?

Solution

Modules would let you expose several functions and classes. InternalFunction only exposes one function at a time.

InternalFunction is something of a curiosity, that we added at some point to answer a "can we do that" type of question. It is one of these things that stay in Rcpp because they once were, but that does not get too much attention from us. It is mostly used in RInside to allow R code to call c++ functions. This is a curious pattern given that with RInside the focus is a C++ application embedding R.

Modules however, do get a lot of attention. My advice would be to use them.

OTHER TIPS

"It depends."

These are different tools for similar purposes. Note the "Internal" though which signals something. In general, Modules are a very fine and powerful too for Rcpp (with their own vignette) and also accessible via RInside.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top