2016-10-18 2 views
0

なぜ次のコードはコンパイルされませんか?MatrixXfのRcpp固有マップエラー

library(Rcpp) 
cppFunction(' 
    int rows(const NumericMatrix& X) { 
     using Eigen::MatrixXf; 
     typedef Eigen::Map<MatrixXf> MapMat; 
     MapMat X1(as<MapMat>(X)); 
     return X1.rows(); 
}', depends = "RcppEigen") 

これは、次のエラーがスローされます。

error: no matching function for call to 'Eigen::Map<Eigen::Matrix<float, -1, -1> >::Map(Rcpp::Vector<14, Rcpp::PreserveStorage>::iterator, int&, int&)' 
     OUT get() {return OUT(vec.begin(), d_nrow, d_ncol);} 

私が代わりにMatrixXdを使用したときと同じコードが正常に動作します。

ありがとうございました。

+0

Rは 'double'しか持っていないので、私たちはRへのインタフェースで' float'をサポートしません。 –

+0

ありがとう、私はそれを認識していませんでした。 – user3294195

答えて

2

NumericMatrixは、タイプdoublefloatとは対照的に)を使用します。 Eigenは、異なる型を使用する行列間の暗黙の型キャストをサポートしていません。あなたのコードは、doubleNumericMatrixのメモリをfloat固有ベクトルとして試してみるようです。代わりにMatrixXdタイプを使用してください。