[Rcpp-devel] help with data.frame and numericvector

Dirk Eddelbuettel edd at debian.org
Thu Apr 28 02:42:30 CEST 2022


On 27 April 2022 at 20:58, Roberto Spadim wrote:
| Hello folks,
| I'm converting some R functions to RCpp at
| https://github.com/OVVO-Financial/NNS/
| 
| My problem is with a R "cast" function
| 
| https://github.com/OVVO-Financial/NNS/blob/d3f37c6f217a41ce15b31f7a840b6b1ad63e5f36/R/Partial_Moments.R#L20
| 
| basically this line:
| 
| ---
| LPM <- function(degree, target, variable){
| if(any(class(variable)%in%c("tbl","data.table"))) variable <-
| as.vector(unlist(variable))
| ...
| }
| ---
| 
| My Rcpp version don't accept data.table type, it return an error of
| type not allow:
| 
| Error in LPM(2, 0, tail(appended_returns, 1)) :
|   Not compatible with requested type: [type=list; target=double].
| 
| Is there some way to accept a "anytype" at Rcpp, and convert it to
| numericvector when need?

In a way. We have a more-or-less FAQ about how to accomodate 'different
run-time types' (think: int vector vs double vector) at compile time. The
easiest is to use a SEXP which *is* already your "anytype" as it (most
literally) covers "any" type in R.  See for example

   https://gallery.rcpp.org/articles/rcpp-wrap-and-recurse/

which shows the basic pattern of switching on TYPEOF().

Otherwise, a tip: decompose compound expressions

 if(any(class(variable)%in%c("tbl","data.table"))) variable <- as.vector(unlist(variable))

into more basic assignments (on the C++ side).  We are getting some wonderful
help from the compiler but the template meta-programming driving this is
finicky. Do NOT assume you can stack expressions as you might in R. No shame
in doing multiple basic expressions -- the compiler (once it knows what to
do) may well optimise temporaries away.

Dirk

| My Rcpp version is:
| 
| https://github.com/OVVO-Financial/NNS/blob/NNS-Beta-Version/src/partial_moments_rcpp.cpp#L68
| 
| and fucntion signature is:
| NumericVector LPM_CPv(const double degree, const NumericVector target,
| const NumericVector variable) {
| 
| i think i should use SEXP as "anytype" and at function body check if I
| should "cast" to NumericVector
| _______________________________________________
| 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
-- 
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org


More information about the Rcpp-devel mailing list