簡単な計算例 (RcppArmadillo)
行列の基本演算
※ RcppArmadilloを使うためには以下の2行を必ず入れる(//は通常コメントを書くために使うが、以下のような // [[Rcpp....]]のような場合にはコメントではなく、依存するライブラリを読み込むという意味になるので注意)
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
※ using namespace arma; を加えると、たとえば型宣言のarma::matをmatだけで表記できるが、変数の型や関数などの依存するライブラリを明確にするために以下のサンプル・コードでは加えない
※Rで呼び出す関数の前には// [[Rcpp::export]]を忘れずに
※MacではコンパイラがC++11に対応していない場合があるようなので、その場合には // [[Rcpp::plugins("cpp11")]]という行を付け加えてください。
基本演算 Code: MySample1.cpp Output: MySample1.out
便利な行列の作り方(単位行列、ゼロ行列、行列の結合) Code: MySample2.cpp Output: MySample2_out
行列の要素を取り出す Code: MySample3.cpp Output: MySample3.out
行列のインクリーメント、クロネッカー積 Code: MySample4.cpp Output: MySample4.out
Loop (for, while, do-while) Code: MySample5.cpp Output: MySample5.out
If文と引数のある関数 Code: MySample6.cpp Output: MySample6.out
値渡しと参照渡し(特にRcpp::NumericVectorの型ではどうなるかに注意、cloneを使うと良い)
Code: MySample7.cpp Output: MySample7.out
arma::matとRcpp::NumericMatrixの型の変換 Code: MySample8.cpp Output: MySample8.out
RcppGSL::MatrixとRcpp::NumericMatrixやarma::matの型の変換 Code: MySample9.cpp Output: MySample9.out
関数の最大化
RcppでRの関数optimを呼び出して最大化を行う(正規分布の平均・分散パラメータの最尤推定値を求める)
Code: MySampleOpt.cpp Ouput: MySampleOpt.out
※optimはデフォルトで関数の最小化を行うので、最大化を行う場合にはオプションでcontrol(fnscale=-1.0) (目的関数に-1.0を乗じる)とする。
数値微分(Gradient, Hessian)
RのライブラリnumDerivを使う
RcppAlrmadilloから呼び出した場合 Code: MySampleDeriv.cpp Output: MySampleDeriv.out
Rの関数で求める場合 Code: MySampleDerivR.R Output: MySampleDerivR.out
乱数の発生
RcppAlrmadilloの乱数 Code: MySampleRandom_arma.cpp Output: MySampleRandom_arma.out
RcppGSLの乱数 Code: MySampleRandom_gsl.R Output: MySampleRandom_gsl.out