Passing a `data.table` to c++ functions using `Rcpp` and/or `RcppArmadillo`

data.table, r, rcpp

Solution

Building on top of other answers, here is some example code:

#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
double do_stuff_with_a_data_table(DataFrame df){
    CharacterVector x = df["x"] ;
    NumericVector   y = df["y"] ;
    IntegerVector   z = df["v"] ;

    /* do whatever with x, y, v */
    double res = sum(y) ;
    return res ;
}

So, as Matthew says, this treats the `data.table` as a `data.frame` (aka a `Rcpp::DataFrame` in `Rcpp`).

require(data.table)
DT <- data.table(
    x=rep(c("a","b","c"),each=3), 
    y=c(1,3,6), 
    v=1:9)
do_stuff_with_a_data_table( DT ) 
# [1] 30

This completely ignores the internals of the `data.table`.

Problem

Is there a way to pass a `data.table` objects to c++ functions using `Rcpp` and/or `RcppArmadillo` without manually transforming to `data.table` to a `data.frame`? In the example below `test_rcpp(X2)` and `test_arma(X2)` both fail with `c++ exception (unknown reason)`. R code ``` X=data.frame(c(1:100),c(1:100)) X2=data.table(X) test_rcpp(X) test_rcpp(X2) test_arma(X) test_arma(X2) ``` c++ functions ``` NumericMatrix test_rcpp(NumericMatrix X) { return(X); } mat test_arma(mat X) { return(X); } ```

Original source