[Rcpp-devel] NumericVector

Dirk Eddelbuettel edd at debian.org
Fri Aug 16 19:13:20 CEST 2013


Hi James,

On 16 August 2013 at 12:57, James Li wrote:
| Hi Dirk,
| 
| N could be anywhere between 3-10. 

Eek. 10 is a lot.

| Thanks! I will definitely look into how to do those.
| 
| Also, if 
| 
| Rcpp::NumericVector vec3 =Rcpp::NumericVector( Rcpp::Dimension(4, 5, 6));
| 
| In this case, how do we access element vec3[1,2,3]?

Well a) you cannot use [] to index, only () as the [] only allows a single
index (and , is a special operator for C/C++).  Romain already sent you a
first cut at something homegrown.  

Alternatively, if you find a matrix library dealing with N up to 10 ... you
may want to consider writing glue code to access it from R via Rcpp.

Cheers, Dirk
 
| Thanks again,
| James
| 
| On Friday, August 16, 2013, Dirk Eddelbuettel wrote:
| 
| 
|     Hi James,
| 
|     On 16 August 2013 at 11:59, James Li wrote:
|     | Dear Dirk and Rcpp-devel members,
|     |
|     | I am currently passing a multidimensional (N > 2) array (i.e.
|     | array(NA, dim = rep(3,5)) ) from R via Rcpp using
| 
| 
|     How big is 'N' going to be?
| 
|     | "in C++:"
|     |
|     | //[[Rcpp::export]]
|     | Rcpp::List check_arrayC (Rcpp::NumericVector x, Rcpp::IntegerVector
|     modes){
|     | //do stuff to x
|     |     return Rcpp::List::create(Rcpp::_["data"] = x, Rcpp::_["modes"] =
|     modes);
|     | }
|     |
|     |
|     | "in R:"
|     |
|     | a <- array(1:32, dim=rep(2,5))
|     | b <- check_arrayC(a, dim(a))
|     |
|     | While I know that a multidimensional array is stored as a contiguous
|     | array internally, is there currently a more natural/efficient way to
|     | pass it back and forth within Rcpp?
|     |
|     | Also from Dirk's book, it seems that an instance of
|     | Rcpp::NumericVector can be instantiated into a multidimensional array
|     | via
|     |
|     | Rcpp::NumericVector vec3 =Rcpp::NumericVector( Rcpp::Dimension(4, 5, 6));
|     |
|     | In this case, how do we access element vec3[1,2,3]?
|     |
|     | Some background about what I am trying to do: I would like to create a
|     | multidimensional array wrapper class around the base R multi-way array
|     | class. I would also like to be able to pass this multidimensional
|     | array via Rcpp to do all the heavy-lifting in c++. Ideally, I could
|     | also convert the mda into a Boost::multi_array.
| 
|     For a moderately-sized project (at work, not open source) I had a very good
|     experience using Armadillo 'cubes' (3-d matrices) which I occassionally
|     stored in 'fields' (which I though of as lists of such cubes).  I think in
|     most (all?) cases I reduces data to 2-d matrices before returning that
|     R. That worked great.
| 
|     Beyond that ... you are on your own as there is very little C++ support
|     already useable by Rcpp.  You'd have to write custom as<>() and wrap()
|     methods (which is not hard and may well be worth it).
| 
|     Cheers, Dirk
| 
|     | Thanks in advance for any help.
|     |
|     | -James
|     |
|     | --
|     | James Li | Ph.D. Candidate | http://jamesyili.com/
|     | Dept. of Statistical Science | Cornell University
|     | _______________________________________________
|     | 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 | edd at debian.org | http://dirk.eddelbuettel.com
| 
| 
| 
| --
| James Li | Ph.D. Candidate | http://jamesyili.com/
| Dept. of Statistical Science | Cornell University

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list