[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