RcppArmadillo を使用した QR 出力が R からの QR 出力と異なる理由は本当に混乱しています。Armadillo のドキュメントにも明確な答えはありません。基本的に、R に n * q (たとえば 1000 X 20 ) である行列 Y を指定すると、1000 X 20 および R 20 X 1000 である Q が返されます。これが必要です。しかし、Armadillo で QR ソルバーを使用すると、Q 1000 X 1000 と R 1000 X 20 がスローされます。代わりに R の qr 関数を呼び出すことはできますか? qx q ではなく、次元 nxq を持つ Q が必要です。以下のコードは私が使用しているものです(より大きな関数の一部です)。
誰かが RcppEigen でそれを行う方法を提案できれば、それも役に立ちます。
library(inline)
library(RcppArmadillo)
src <- '
Rcpp::NumericMatrix Xr(Xs);
int q = Rcpp::as<int>(ys);
int n = Xr.nrow(), k = Xr.ncol();
arma::mat X(Xr.begin(), n, k, false);
arma::mat G, Y, B;
G = arma::randn(n,q);
Y = X*G;
arma::mat Q, R;
arma::qr(Q,R,Y);
return Rcpp::List::create(Rcpp::Named("Q")=Q,Rcpp::Named("R")=R,Rcpp::Named("Y")=Y);'
rsvd <- cxxfunction(signature(Xs="numeric", ys="integer"), body=src, plugin="RcppArmadillo")