[Rcpp-devel] type information about elements in Rcpp::List
Dirk Eddelbuettel
edd at debian.org
Thu May 10 02:08:54 CEST 2012
On 9 May 2012 at 18:19, Steve Lianoglou wrote:
| Hi,
|
| On Wed, May 9, 2012 at 5:34 PM, Jiqiang Guo <guojq28 at gmail.com> wrote:
| > Dirk, Thanks.
| >
| > As Dirk previously points out, every element of Rcpp::List is of type SEXP.
| > So I looked at
| > some R's doc, we should be able to get information (attributes in R's term:
| > int or real, names, dims)
| > from the SEXP at least using R's C functions such as examples at
| > http://cran.r-project.org/doc/manuals/R-exts.html#Attributes
| > and the functions used in Dirk's example.
|
| Assuming I'm following along here:
|
| As someone who trusts my R skills much more than my C(++) ones, I feel
| like I'd jimmy this scenario into one which I'd do the "heavy lifting"
| of type-checking the elements of a list and dispatching them to
| appropriate C++ code given their class in R, then collate the results
| back in R.
|
| (assuming the looping in R won't kill you, speedwise).
|
| Know what I mean?
|
| For instance, I'd have some R function that takes the list and directs traffic:
|
| theFunction <- function(x) {
| stopifnot(inherits(x, "list"))
| result <- sapply(x, function(xx) {
| cpp.fun.name <- paste("theFunction", class(xx), sep="_")
| ## Check cpp.fun.name to make sure it's a valid function
| ## you defined in your C++ code, else raise an error about
| ## unsupported class
| .Call(cpp.fun.name, xx, PACKAGE="yourpackage")
| }, USE.NAMES=TRUE)
|
| And you'd have suitable functions defined in your C++ side for the
| different types of things you want to support, ie:
|
| RcppExport SEXP theFunction_integer(SEXP xx);
| RcppExport SEXP theFunction_numeric(SEXP xx);
| RcppExport SEXP theFunction_character(SEXP xx);
|
| and so on ...
Good thinking. It's just that sometimes we may get such lists from other C++
code rather than from R, so we'd also like to emulate the R behaviour.
And with the various Rf_isXXX() functions (for different values of XXX) we
should be able to get there...
Dirk
--
R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL
See agenda, registration details and more at http://www.RinFinance.com
More information about the Rcpp-devel
mailing list