我需要通过 Rcpp 从犰狳进行 qr 分解。以下 R 代码(带有经济 QR)确实运行:
# test matrix:
m<-5; n<-4
set.seed(123)
X <- replicate(n, runif(m))
sourceCpp(code='
#include <iostream>
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
//[[Rcpp::export]]
List QRdec_econ(arma::mat X) {
int n = X.n_cols;
int m = X.n_rows;
arma::mat Q(m, n);
Q.fill(0);
arma::mat R(n, n);
R.fill(0);
arma::qr_econ(Q,R,X);
return List::create(_["Q"] = Q,
_["R"] = R
);
}'
)
QRdec_econ(as.matrix(X))
相反,以下代码(非常相似,只是使用 qr 而不是 qr_econ)在编译时失败:
sourceCpp(code='
#include <iostream>
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
//[[Rcpp::export]]
List CPHHQR_arma(arma::mat X) {
int n = X.n_cols;
int m = X.n_rows;
arma::mat Q(m, m);
Q.fill(0);
arma::mat R(m, n);
R.fill(0);
arma::umat P(n, n);
P.fill(0);
arma::qr(Q,R,P,X,"matrix");
return List::create(_["Q"] = Q,
_["R"] = R,
_["P"] = P
);
}'
)
对于这种奇怪的代码行为有什么建议吗?提前谢谢了。