RcppEigen 作为参数失败

RcppEigen as an argument fails

我正在尝试使用 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) {
}

它失败了。

如果我尝试在参数中使用 long double 也会失败(使用以前有效的组合,当使用 double 时):

// [[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) {
}

我该怎么办?

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

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

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

它确实可以编译。没试过能不能正常使用