xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

redsvdのwrapper RRedSVDとRパッケージ作成、公開についての覚え書き

疎行列に対する特異値分解の高速な近似実装 redsvdのR wrapperである RRedSVDを作成、公開しました。

https://github.com/xiangze/RRedsvd

ライセンスはBSDです。

 

TokyoRでは特異値分解とは何か、どんな手法があるかなどの基本的説明、RとC++を橋渡しするRcpp, RcppEigen packageの紹介などを解説しました(全ては説明しきれませんでした)。

 

アルゴリズムと性能に関してはredsvdのプロジェクトページ(https://code.google.com/p/redsvd/ 日本語、英語), 製作者のhillbigさんのブログ(http://hillbig.cocolog-nifty.com/do/2010/08/redsvd-aa59.html 日本語)、NIPS tutorial(http://amath.colorado.edu/faculty/martinss/Talks/2009_NIPS_tutorial.pdf 英語)が詳しいです。

 

以下はRcppを用いたパッケージ開発に関する覚書です。

R CMD Rd2pdf --no-clean 

を実行すると良い。

  • CRANへの登録

http://cran.r-project.org/submit.htmlへsubmitする。各アーキテクチャ(Linux,Windows,MacOS)へのビルド、インストールの確認は手作業で行われているらしい。

手元の環境ではWindows32bit/64bitともにビルドできたがCRANの環境ではエラーメッセージ

 
g++  -I"D:/RCompile/recent/R/include" -DNDEBUG -I"d:/Rcompile/CRANpkg/extralibs215/local215/include"  -I. -Iredsvd-0.2.0/src `Rscript -e "Rcpp:::CxxFlags()"` `Rscript -e "Rcpp:::CxxFlags()" |sed 's/Rcpp/RcppEigen/'`   -O2 -Wall  -mtune=core2 -c redsvdwrap.cpp -o redsvdwrap.o
 
g++ -shared -s -static-libgcc -o RRedsvd.dll tmp.def redsvdwrap.o -lz -L. -lredsvd d:/RCompile/CRANpkg/lib/3.1/Rcpp/lib/x64/libRcpp.a -Ld:/Rcompile/CRANpkg/extralibs215/local215/lib/i386 -Ld:/Rcompile/CRANpkg/extralibs215/local215/lib -LD:/RCompile/recent/R/bin/i386 -lR
 
redsvdwrap.o:redsvdwrap.cpp:(.text+0x8a): undefined reference to `Rcpp::RObject::RObject(SEXPREC*)'

 

があった(libRcppへのリンクがされていない?)。

 

Reference