Bir seyrek dönüşüm için RcppArmadillo paketinin (R 3.0.1 sürüm 0.3.910.0 ve evrerything) en son yeteneğini kullanmaya çalışıyorum Matrix paketinden (class "dgCMatrix") matrisin sp_mat türü armadillo'ya. "RcppArmadilloExtensions/spmat.h" dosyasındaki "as" ve "wrap" işlevlerini kullanıyorum. Ne yazık ki, "R CMD INSTALL myRpackage" çağrılırken paylaşılan kütüphaneyi oluşturmaya çalışırken bir derleme hatası yaşıyorum. RcppArmadilloExtensions/sp_mat.h ile Matrix'den armadillo'ya dönüşümlü matris dönüşümü
- I gerçekleştirmek için .H karşılık gelen başlıklarıyla 2 cpp dosyaları tarif
- RcppArmadillo.package.skeleton() ile, bir boş paket oluşturuldu: Burada hata yeniden oluşturmak için en az bir örnektir toplam ve R ithal seyrek matrisler ürün, aşağıdaki gibi:
"arma_sp_sum.h"#ifndef _anRpackage_ARMA_SP_SUM_H #define _anRpackage_ARMA_SP_SUM_H #include <RcppArmadilloExtensions/spmat.h> RcppExport SEXP arma_sp_prod(SEXP SPMAT) ; #endif
dosya
dosyası "arma_sp_sum.cpp"
#ifndef _anRpackage_ARMA_SP_PROD_H
#define _anRpackage_ARMA_SP_PROD_H
#include <RcppArmadilloExtensions/spmat.h>
RcppExport SEXP arma_sp_prod(SEXP SPMAT) ;
#endif
dosyası "arma_sp_prod.cpp" O
#include "arma_sp_prod.h"
using namespace Rcpp ;
SEXP arma_sp_prod(SEXP SPMAT){
arma::sp_mat m1 = Rcpp::as<arma::sp_mat>(SPMAT) ;
arma::sp_mat m2 = Rcpp::as<arma::sp_mat>(SPMAT) ;
arma::sp_mat res = m1 * m2;
return Rcpp::wrap(res) ;
}
"arma_sp_prod.h"
#include "arma_sp_sum.h"
using namespace Rcpp ;
SEXP arma_sp_sum(SEXP SPMAT){
arma::sp_mat m1 = Rcpp::as<arma::sp_mat>(SPMAT) ;
arma::sp_mat m2 = Rcpp::as<arma::sp_mat>(SPMAT) ;
arma::sp_mat res = m1 + m2;
return Rcpp::wrap(res) ;
}
dosya, zaman $ R CMD KUR çalışıyor anRpackage $, derleyici art arda ".o" dosyaları oluşturur ama aşağıdaki ld hatası alırsınız:
ld: duplicate symbol arma::SpMat<double> Rcpp::as<arma::SpMat<double> >(SEXPREC*)in arma_sp_sum.o and arma_sp_prod.o for architecture x86_64
collect2: ld returned 1 exit status
make: *** [anRpackage.so] Error 1
ERROR: compilation failed for package ‘anRpackage’
Peki ne yapıyorum yanlış? Maalesef aptalca bir soru olsaydı ... Neyse, armadilllo/RcppArmadillo ile iyi bir iş yapan herkese ve yardımın için teşekkürler.
J.
: güncellenen kod ile
Ayrıca, şimdi, sadece gerektiğinde
, böyle bir şey yanı sıra paket derlemek açabiliyorum Bu soruyu, Rcpp geliştiricilerinin takılmaya eğilimli olduğu [Rcpp-devel postalama listesi] (https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel) adresinden sormak. [Önceki yazılar] (http://lists.r-forge.r-project.org/pipermail/rcpp-devel/) arşivleri de mevcuttur. – mtallBunu yeniden üretebilirim. Ben spmat.h' dosyasının güncellenmesi gerektiğini düşünüyorum. –