2016-04-28 112 views
0

映射工作正常:rcppEigen不支持RowVectorXd?

Map<Eigen::VectorXd> x(as<Map<Eigen::VectorXd> >(y)); 

但与:

Map<Eigen::RowVectorXd> x(as<Map<Eigen::RowVectorXd> >(y)); 

是RowVectorXd不RcppEigen支持?

回答

1

编辑:

的代码,以使这种形式的包装已合并为RcppEigen dev的版本。随时通过抓住一个副本:

devtools::install_github("RcppCore/RcppEigen") 

原文:

每RcppEigen的unit testsexporters,它looks好像只有VectorXd/VectorXi目前有出口类设置。

这需要添加到出口商类。这是一个PR containing the fix

template<typename T> 
class Exporter<Eigen::Map<Eigen::Matrix<T, 1, Eigen::Dynamic> > > { 
    typedef typename Eigen::Map<Eigen::Matrix<T, 1, Eigen::Dynamic> > OUT ; 
    const static int RTYPE = ::Rcpp::traits::r_sexptype_traits<T>::rtype ; 
    Rcpp::Vector<RTYPE> vec ; 

    public: 
     Exporter(SEXP x) : vec(x) { 
      if (TYPEOF(x) != RTYPE) 
       throw std::invalid_argument("Wrong R type for mapped vector"); 
     } 
     OUT get() {return OUT(vec.begin(), vec.size());} 
    } ; 

由于RowVectorXd被给定为X小数的行向量:Matrix<double, 1, X>。见Matrix docs