RcppEigen作为参数失败

时间:2018-10-19 11:11:42

标签: r eigen rcpp

我正在尝试使用RcppEigen创建一个函数,该函数调用(输出)具有长双精度的本征矩阵。

当我编译时:

// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>>& onesfgh_LPPLS) {
}

它起作用(当然,有一个警告,指出该函数什么也不做)。但是当我对以下内容执行相同操作时:

// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, 4>>& onesfgh_LPPLS) {
}

失败。

如果我在参数中使用长双精度字(使用以前使用双精度字的组合),也会失败:

// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>>& onesfgh_LPPLS) {
}

我该怎么办?

1 个答案:

答案 0 :(得分:2)

第二个变体不起作用,因为RcppEigen仅支持用于从R对象自动转换为Eigen对象的动态矩阵和向量。由于R对象本质上是动态的,因此这是完全合理的。因此,当需要从R进行转换时,本征 中的维度参数必须为1或Dynamic

第三种形式失败,因为您尝试基于使用long double的R对象使用double初始化本征对象。请记住,对于Eigen::Map,R和本征对象共享相同的内存。如果数据类型不同,那么这将无法正常工作,而您必须在某处进行转换。如果我删除了Eigen::Map,即使用

// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>& onesfgh_LPPLS) {
}

它确实可以编译。我没有尝试过它是否可以正常工作。