読者です 読者をやめる 読者になる 読者になる

300億円欲しい

メジャーリーグのデータ解析します

RからC++を使いたい (Rcppの練習)

R C++

Rは便利ですが, 重たい計算をさせると遅いです.
計算が重たい部分だけ他の言語を利用すれば, 早く計算できますね.

今回はRからC++を利用します.
Rcppというパッケージを使えばいいです.

便利で速い計算環境が構築できるんじゃないですかね.

RからC++を使う

Rcppをインストールすればいいです.
ついでにinlineもインストールします.
Rのソースコードの中で, 遅いところだけC++で書き直せばいいです.

試しに, ソートの実行をしてみます.

STL sort with Rcpp
Rコードの中で, ちょっとだけC++のコードを書けばいいです.
これはありがたいです. コンパイルも楽です.

実験してみましょう.

> stlsort(20:1)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

ちゃんとできます.

ところで, Rにもsort関数があります.
どちらが速いでしょうか. 比べてみましょう.

配列の長さを変えながら, 10^n列のランダムな数列をソートして, その時間を測ってみました.

f:id:gg_hatano:20140113220249p:plain
...
素数が1000万個を超えたくらいからRでは辛そうです
でもそんな長い配列を使う機会ってありませんし...
ソートの場合はRでいいですね.

図の軸を指数表示したい

図で少し工夫があります. 何もせずにggplotするとこうなります.
f:id:gg_hatano:20140113220251p:plain
x軸のラベルの表示がダサいです.
10^n という形で表示をさせたいです.

10^n という形で表示したいときには, パッケージを利用する必要があると思います.
scalesというパッケージです.
CRAN - Package scales
ドキュメントを見ると, なかなか多機能みたいですね.

使い方は, ggplotのレイヤーを書き加える過程で,

p <- p + scale_x_log10(breaks=10^(1:8), 
                       labels=trans_format("log10", math_format(10^.x)))

とすればOKです.
これは知りませんでした.

次はBoostやEigen, QuantLibなどのC++の高速演算ライブラリをRから使ってみます.