[Rcpp-devel] Subsetting / slicing with Vectors

Dirk Eddelbuettel edd at debian.org
Sat Jan 12 21:38:45 CET 2013


Hi Kevin,

On 12 January 2013 at 11:10, Kevin Ushey wrote:
| I'm wondering -- what operations are available for subsetting of Vectors in
| Rcpp? I've scoured through all the vignettes but it seems like a couple
| 'nice-to-haves' aren't there yet. My questions:
| 
| * is there a difference between subsetting a vector with () vs []? 

For vectors, both work. We sometimes wondered if one should test or not. I
think they both have the same speed.  It may be better to use () because ...

For matrices, [] does not work (C interview question: what is [3,4] returning ?)
so it may be better to get used to (i,j) anyway.
 
| * is it possible to subset based on a collection of indices, eg:
| 
| NumericVector X(10);
| NumericVector Y = X[ c(1, 2, 5) ]

Nope. "Not yet." May take a long time.

This came up before on StackOverflow where I once answered by pointing to an
RcppArmadillo solution as Armadillo _can_ do this.
 
I recently came up with a cleverish way to approximate this using the STL,
and wrote piece a for the Rcpp Gallery on it, so see

   http://gallery.rcpp.org/articles/stl-transform-for-subsetting/

| * is it possible to slice a vector, eg. such that we either hold a reference
| to, or copy out, the elements at every 'x' indices? I know 'seq' is available
| for consecutive indices, but might there be a third 'by' argument coming, or an
| alternative function, soon?

Nope. As we wrap around SEXPs which are contiguous vectors, I don't really
see how we can do this.
 
Hope this helps!

Dirk

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


More information about the Rcpp-devel mailing list