新映射的SparseMatrix类型RcppEigen编译错误

时间:2017-07-10 11:58:17

标签: r eigen rcpp

自RcppEigen版本3.3.3.0起,MappedSpareMatrixTdeprecated。出于某种原因,当使用这种新类型编译函数时,我会收到错误。

例如(基于this question);

编辑:来自无外套的建议 - 仍然会遇到相同的错误。

#include <RcppEigen.h>

typedef Eigen::Map<Eigen::SparseMatrix<double> > mappedSparseMatrix;
typedef Eigen::Map<Eigen::VectorXd> mappedVector;

// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::export]]
Eigen::VectorXd cgSparse(const mappedSparseMatrix A, const mappedVector b) {
  Eigen::ConjugateGradient< mappedSparseMatrix, Eigen::Lower > cg(A);
  return cg.solve(b);
}

我尝试了不同的东西,甚至复制了Rcppeigen unitTests;

中的类型
typedef Eigen::Map<Eigen::SparseMatrix<double, Eigen::ColMajor> > MapMat;

在这两种情况下,我都会收到以下错误;

errors

SessionInfo():

R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RcppEigen_0.3.3.3.0  RevoUtilsMath_10.0.0

loaded via a namespace (and not attached):
[1] compiler_3.4.0   Matrix_1.2-9     RevoUtils_10.0.4 tools_3.4.0      Rcpp_0.12.10     grid_3.4.0      
[7] lattice_0.20-35 

通过上述变化 - 我如何映射我的稀疏矩阵?例如,在上面的函数sparseCG中? (注意:我是C ++新手)

1 个答案:

答案 0 :(得分:0)

文件RcppEigenForward.hRcppEigenWrap.h中有一条注释,从{Eigen 3.3.0开始,mappedSparseMatrix上游已被弃用。

如果我将其更改为

typedef Eigen::SparseMatrix< double > mappedSparseMatrix;

即使用完全稀疏矩阵(而不是映射到它)然后编译。