On 21 January 2014 at 22:02, Søren Højsgaard wrote:
| I have made the following primitive "concatenate" function, because I 
couldn't find one in Rcpp:
| 
| template <const int RTYPE>
| Vector<RTYPE> do_conc_(Vector<RTYPE> x, Vector<RTYPE> y){
|   int nx=x.size(), n=x.size()+y.size(),i,j;
|   Vector<RTYPE> out=no_init(n);
|   for (i=0; i<nx; ++i){ out[ i ] = x[ i ];}
|   for (j=i, i=0; j<n; ++j, ++i){ out[ j ] = y[i] ;}
|   return out;
| }
| 
| // [[Rcpp::export]]
| SEXP conc( SEXP& XX_, SEXP& YY_){
|   int type = TYPEOF(XX_) ;
|   switch( type ){
|   case INTSXP  : return do_conc_<INTSXP> ( XX_, YY_ ) ;
|   case REALSXP : return do_conc_<REALSXP>( XX_, YY_ ) ;
|   case STRSXP  : return do_conc_<STRSXP> ( XX_, YY_ ) ;
|   case VECSXP  : return do_conc_<VECSXP> ( XX_, YY_ ) ;
|   }
|   return R_NilValue ;
| }
| 
| As you can see it assumes that the two inputs XX_ and YY_ are of the same 
type, and it fails to copy names to the output. If I have missed any such 
functionality in Rcpp then I would be happy to know...

My instinct would be to use RcppArmadillo vectors:

R> cppFunction("arma::colvec conc(const arma::colvec & x, const arma::colvec & 
y) { return arma::join_cols(x, y); }", depends="RcppArmadillo")
R> conc(1:3, 11:13)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]   11
[5,]   12
[6,]   13
R> 

For more _generic_ solutions, the STL offers a lot.  

Dirk

-- 
Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to