0
RcppコードにnearPD
関数を使用しようとしています。それは些細なようだが、なぜそれが動作しないのか分からない。これは私のコードの簡略化されたバージョンです:Rcpp cdeをRで実行すると「マトリックスではありません」というエラーが発生する
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace arma;
using namespace Rcpp;
// [[Rcpp::export]]
mat eBsc(mat R){
Rcpp::Environment Matrix("package:Matrix");
Rcpp::Function nearPD = Matrix["nearPD"];
Rcpp::List PD=nearPD(R);
mat P = PD["mat"];
return P;
}
しかし、私はそれをテストしたいときなどです。下記のようにR:
A <- matrix(1, 3,3); A[1,3] <- A[3,1] <- 0
d<-eBsc(A)
このエラーメッセージは、"Error in eBsc(A) : not a matrix"
です。 私はnearPDが最初のものが行列である出力のリストを返すことに言及する必要があります。
ありがとう、それは今動作します。 – Ham82
しかし、この行列を他の計算で使用したいのであれば、それは動作しません。たとえば、マットやNumericMatrix Aを使用している場合、 "as.matrix"コマンドを使用しても大文字小文字の "A * P"は機能しません。 P(S4オブジェクトとして)をRcppコード内の適切なタイプのデータに変換する方法はありますか? – Ham82
はい、答えのマトリックスに変換する方法を説明します。 – Roland