r - Can I create vectors from DataFrame columns on the fly in RCpp -


i have far fetched question rcpp, tend use lot of dataframe objects create xxxvector within c++ , export r. have deal 10 columns have define myself :

export [[rcpp::export]] list myfunction(dataframe df){    numericvector = df["a"], b = df["b"], c = df["c"];    integervector a2 = df["a2"], b2 = df["b2"], c2 = df["c2"];    charactervector a3 = df["a3"], b3 = df["b3"], c3 = df["c3"];     const int n = df.nrows();    logicalvector out(n),out1(n);     for(unsigned int = 0; i<n; ++i){       //here want    }     return(list::create(_["out"]=out, _["out1"]=out1)); } 

if declaration list long complex names declarations take ages. not declare a,b,c,... , work df["a"],... longer. question (and might heresy) there way automatically define vector columns ? thought have dataframe list of pointers columns may possible automate it...

sounds like, if r code, want turn dataframe "environment". can't see way similar in c++ -- difference between interpreted , compiled language.

if you're wanting automate generation of boilerplate code, try doing in r. along lines of

gendfboilerplate <- function( coltypes, dfname="df" ) {   ## coltypes named character vector elements  "integer", "logical",    ##   "character", etc.   ## , names(coltypes) dataframe column names   ## name of dataframe dfname (default: df)   bp = character(0)   for( name in names(coltypes) )   {     decl <- sprintf('    const %svector& %s(%s["%s"]);', coltypes[name], name, dfname, name)     bp <- append(bp, decl)   }   paste(bp, sep="", collapse="\n") } 

for example:

> coltypes = c(a="integer", b="numeric") > bp = gendfboilerplate(coltypes) > cat(bp)     const integervector& a(df["a"]);     const numericvector& b(df["b"]); 

(i've declared variables const references maximum efficiency. can modify depending on specifics of function (eg if dataframe passed reference , want local copy of column in order modify it.))

how boilerplate rcpp function code leave you; copy/paste 1 solution.


Comments