Аналогичный вопрос был задан ранее, здесь:конвертировать Rcpp :: NumericVector в Эйгеном :: VectorXd
Дело в том, код, который я нашел в fastLm.cpp (в конце) не работает для меня.
Rcpp::NumericVector X((SEXP) R.parseEval("x <- 1:10"));
Eigen::Map<Eigen::VectorXd> XS(Rcpp::as<Eigen::Map<Eigen::VectorXd>>(X)); //!!not working
Это дает следующее сообщение об ошибке:
error: no matching constructor for initialization of 'Eigen::Map<Eigen::Matrix<double, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >'
Exporter(SEXP x) : t(x){}
и (помимо прочего):
note: candidate constructor (the implicit copy constructor) not viable: cannot convert argument of incomplete type 'SEXP' (aka 'SEXPREC *') to 'const Eigen::Map<Eigen::Matrix<double, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >'
template<typename PlainObjectType, int MapOptions, typename StrideType> class Map
Это может иметь что-то делать с объектом Sexp?
Да, я использую RInside - забыл упомянуть об этом. Я посмотрел на rinside_eigen0 в примерах/на самом деле. После включения RcppEigen он работает сейчас. Благодаря! – beginneR
Не проблема сама по себе, очевидно, но «шум» в контексте вашего актуального вопроса. Итак, вы, оказывается, просто использовали RInside неправильно, но это происходит. –