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); } ```