I’m writing an Rcpp module an would like to return as one element of the RcppResultSet list a list whose elements are vectors. E.g., .Call("myfunc")$foo should be something like:
[[1]]
[1] 1
[[2]]
[1] 1 1
[[3]]
[1] 1 1 1
(the exact numbers are not important here). The issue is that I don’t know the right Rcpp way of doing this. I tried passing a vector<vector<int> > but this constructs a matrix by silently taking the length of the first vector as the width (even if the matrix is ragged!). I’ve tried constructing an RcppList but have a hard time casting various objects (like RcppVector) safely into SEXPs.
Anyone have tips on best practices for dealing with complicated structures such as lists of vectors in Rcpp?
[ Nice to see this here but Romain and I generally recommend the rccp-devel list for question. Please post there going forward as the project is not yet that large it warrants to have questions scattered all over the web. ]
RcppResultSetis part of the older classic API whereas a lot of work has gone into what we call the new API (starting with the 0.7.* releases). Have a look at the current Rcpp page on CRAN and the list of vignettes — six and counting.With new API you would return something like
all in one statement (and possibly using explicit
Rcpp::wrap()calls), creating what in R would beAnd
Rcpp::Listshould also be able to do lists of lists of lists… though I am not sure we have unit tests for this — but there are numerous examples in the 500+ unit tests.As it happens, I spent the last few days converting a lot of RQuantLib code from the classic API to the new API. This will probably get released once we get version 0.8.3 of Rcpp out (hopefully in a few days). In the meantime, you can look at the RQuantLib SVN archive