У меня есть следующий код:
#include <RcppEigen.h>
using namespace Rcpp;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Eigen::Lower;
using Eigen::Map;
// fills passed dense objects with unit normal random variables
template <typename Derived>
void fillUnitNormal(Eigen::DenseBase<Derived>& Z){
int m = Z.rows();
int n = Z.cols();
NumericVector r(m*n);
r = rnorm(m*n, 0, 1); // using vectorization from Rcpp sugar
Map<VectorXd> rvec(as<Map<VectorXd> >(r));
Map<MatrixXd> rmat(rvec.data(), m, n);
Z = rmat;
}
Это работало хорошо для меня в течение некоторого времени.Тем не менее, я понял, что если Z является объектом VectorXd, то функция потерпит неудачу.Как правильно заполнить каждый элемент объекта Eigen, унаследованного от класса Eigen :: DenseBase, нормальным (0,1) рисованием?