2016-04-28 147 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