簡単な計算例 (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を使う

乱数の発生