[Rcpp-devel] return Colvec as vector

Serguei Sokol serguei.sokol at gmail.com
Fri Jul 28 14:59:41 CEST 2017


Le 28/07/2017 à 13:45, Dirk Eddelbuettel a écrit :
> 
> On 27 July 2017 at 18:37, Serguei Sokol wrote:
> | I can hear from here "Oh no, not again this question!" ;)
> 
> ;-)
> 
> | But this time it is not a question it is a feature suggestion.
> | What if we replace in RcppArmadilloWrap.h:64:
> |      template <typename T> SEXP wrap( const arma::Col<T>& data ){
> |          return RcppArmadillo::arma_wrap( data, Dimension( data.n_elem, 1) ) ;
> |      }
> | by something like:
> |      template <typename T> SEXP wrap( const arma::Col<T>& data ){
> | #ifdef RETURN_COLVEC_AS_VECTOR
> |          return RcppArmadillo::arma_wrap( data ) ;
> | #else
> |          return RcppArmadillo::arma_wrap( data, Dimension( data.n_elem, 1) ) ;
> | #endif
> |      }
> |
> | In this way, a legacy code relying on one column matrix is not impacted,
> | while other users can define a macro RETURN_COLVEC_AS_VECTOR
> | before "#include <Rcpp>" and enjoy a more intuitive behavior.
> |
> | Was it already proposed and rejected?
> 
> Don't think so, but I have thought about it too, and I was planning to bring
> this up.  I also find the 'always forced to be dimension one matrix' to be a
> (very early) design decision I would not make again.  And I have been
> thinking along similar lines---we need an option to restore it / keep it as
> the defaults, and a newer alternative to let this collapse to a dimless
> vector.  What you rprose could work (maybe by prefixing RCPP_ARMADILLO_ to
> the #define though).
Cool. Then to be complete, we can think about a full set of options, smth. like:
RCPP_ARMADILLO_RETURN_COLVEC_AS_VECTOR
RCPP_ARMADILLO_RETURN_ROWVEC_AS_VECTOR
RCPP_ARMADILLO_RETURN_ANYVEC_AS_VECTOR

Serguei.


More information about the Rcpp-devel mailing list