映射适用于:
Map<Eigen::VectorXd> x(as<Map<Eigen::VectorXd> >(y));
但不是:
Map<Eigen::RowVectorXd> x(as<Map<Eigen::RowVectorXd> >(y));
RcppEigen不支持RowVectorXd吗?
答案 0 :(得分:1)
修改强>
启用此形式包装的代码已合并到RcppEigen
的开发版本中。随意通过以下方式获取副本:
devtools::install_github("RcppCore/RcppEigen")
<强>原始强>
Per RcppEigen的unit tests和exporters,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