对于RcppEigen
,我需要一个Matrix3d
作为函数的参数。但这是不可能的,它仅接受MatrixXd
。我试图进行如下铸造,但这行不通:
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
Eigen::Matrix3d m3 = m.cast();
......
任何解决方案吗?
答案 0 :(得分:2)
您可以在新矩阵的初始化中使用现有矩阵:
// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>
// [[Rcpp::export]]
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
Eigen::Matrix3d m3(m);
return Rcpp::List::create(Rcpp::Named("size") = m3.size());
}
/*** R
MtoAxisAngle(matrix(1:9,3,3))
# MtoAxisAngle(matrix(1:16,4,4))
*/
由于矩阵不一致的呼叫会杀死R,因此您应事先检查大小是否正确。