rcppEigen不支持RowVectorXd?

时间:2016-04-28 16:41:50

标签: rcpp eigen

映射适用于:

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

但不是:

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

RcppEigen不支持RowVectorXd吗?

1 个答案:

答案 0 :(得分:1)

修改

启用此形式包装的代码已合并到RcppEigen的开发版本中。随意通过以下方式获取副本:

devtools::install_github("RcppCore/RcppEigen")

<强>原始

Per RcppEigen的unit testsexporterslooks,好像只有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