Armadillo,RcppArmadilloにみるC++ライブラリのR化

  • Armadilloの中身をみるためにはここからダウンロード
  • RcppArmadilloの中身を見るためにはこのgithubへアクセス
  • まずは、Armadilloが何かを確認しよう
    • C++で素敵に線形代数をやるためのライブラリで、LAPAKとかに依存している(依存せずに使ってもよいらしいけれど)
  • 次にRcppArmadilloが何かを確認しよう
    • RcppはRcppが定義している書式でC++関数を書くと、R側からそのC++関数を呼び出して使えるようにしてくれる仕組み。Rのパッケージ
    • RcppArmadilloは、そのRcppの仕組みに乗っかることでArmadilloライブラリを使ってC++関数を書きつつ、そのC++の書き方にRcpp書式を用いることで、Armadilloライブラリを使ったC++関数をRから呼び出して使える様にしてくれる、というRのパッケージ
    • RからArmadilloを使わせてくれるわけで、RcppArmadilloパッケージの中にArmadilloの「力のすべて」が備わっていなくてはならない
    • ちなみにArmadilloはLAPAKとかに依存したり…ということがあったけれど、RがそもそもLAPAKとかを使ってそのベースを作っているので、LAPAKとかを入れる必要はなくなっている
  • さて、こんなRcppArmadilloパッケージだが、何を備えていなくてはならないだろう?
    • Armadillo本体
    • ArmadilloをRcppとつなぐための仕組み
    • Armadillo+RcppとをRにつなぐための仕組み
    • RcppArmadilloがうまくコンパイルできる仕組み
  • RcppArmadilloの中のArmadillo本体はどこ?
    • そもそもArmadilloの方の「本体」はどこか?というとinclude/armadillo_bits/の下にあるたくさんの.hppファイルらしい(ヘッダファイルたち)
    • これがRcppArmadilloではinst/include/armadillo_bits/に置かれている
    • また、Armadillo本体の方の/include/armadilloという拡張子無しのファイルも色々と大事なことが書いてあるヘッダーファイルのようで、このファイルはRcppArmadilloの方でもinst/include/以下にある。そしてarmadillo_bits以下のファイルをincludeすることを決めている
  • srcには何が?
    • ArmadilloもRcppArmadilloも本当の本体はsrc/に置くんじゃないの?と思うが、そこには、Armadilloの場合はWrapper.cppしかないし、RcppArmadilloの方はRcppArmadillo.cppというかなり簡素なソースファイルがあり、別のひとつはRcppExports.cppというソースファイルだが、これは、Rcppによって自動生成されたファイルであることが以下のファイル内記述からわかる
// This file was generated by Rcpp::compileAttributes
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
    • もう一つfastLm.cppというのがあるが、まあ、おまけの様なものなのだろう
    • そのほかにRcppArmadilloのsrc/にあるのはMakevarsファイル(LINUX/MCOS用とWindows用)があって、これは、RcppArmadilloをコンパイルするときの設定が書いてあって
PKG_CXXFLAGS=-I../inst/include
PKG_LIBS= $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
    • とあるように、この配布フォルダの中のinst/includeにインクルードパスを通しつつ、LAPAKやらのライブラリを使ってね、ということだが、 $(LAPACK_LIBS)のようにすでに「R自身のインストール」のときとかにLAPAKのありかとかは変数化されているからそれを使いましょう、と書いてある
  • もう一度inst/include/に戻ろう。RcppArmadilloの方にはArmadillo本体よりたくさんのヘッダファイルがおいてある。これが、ArmadilloではなくてRcppArmadilloをコンパイルするための諸情報になっている(はず)。include/にそのまま置かれているものと、フォルダに納めてあるものがあるが、それは整理の都合だろう。
  • RcppArmadilloが提供するR関数は、と言えばRフォルダ内にあるそれだし、対応するRdファイルはmanフォルダの中である
  • また、NAMESPACEがどうなっているかをNAMESPACEファイルの記述で確認するのもよいだろう
  • configureファイルはシステムに問い合わせをして、必要な情報を変数化しているようだ