Rcppを試す
Rcppを試す
https://rs-fan-jp.shinyapps.io/surv_jp/
H22 survival data in Japan
前に自作したWebアプリで、すでに人生の折り
返し時点を過ぎてしまっていることに気がついた。
親の平均余命もなんか具体的すぎてグッと来る。
時間は無限ではないので、ここらで更に新しい
言語に挑戦するのも良いんじゃないかと思った。
まずはお手軽に、Rccpから挑戦してみる。
http://www.slideshare.net/masakitsuda940/rcpp-36654397
Rcppのすすめ from Masaki Tsuda
Rcppのすすめここを参考にする。
http://rpubs.com/kaz_yos/pi-calcRPubs - pi calculation
このpi計算をやってみる
library(Rcpp) library(rbenchmark) cppFunction('double pi3Cpp(){ long circle_in = 0; Rcpp::NumericVector x = runif(200000000); for (long i = 0; i < 100000000; ++i) { double l = x[i]*x[i] + x[i+100000000]*x[i+100000000]; if (l < 1.0){ circle_in++; } } return(4.0 * circle_in / 100000000); }') f0 <- function(){ n = 100000000 x <- runif(n = n) y <- runif(n = n) print(4*sum(x^2 + y^2 <= 1)/n) } rbenchmark(f0(),pi3Cpp()) > benchmark(f0(),pi3Cpp(),replications = 1) [1] 3.141575 [1] 3.1417 test replications elapsed relative user.self sys.self user.child sys.child 1 f0() 1 9.43 3.532 8.98 0.43 NA NA 2 pi3Cpp() 1 2.67 1.000 2.46 0.17 NA NA >
9.4秒が2.6秒になった。わーい。
ただ使ってみて良くわかったのは、コンパイルエラーは難しい。
こんな単純なことでもエラーで苦労した。
慣れているとはいえ、なんとRは簡単な事か。
本当はC++の一様乱数を使用したかったが、エラーで使えなかった。
#include <random>してもstd::mt19937がエラーで読めない。
結局Rのrunif()を使っている。この呼び出し時間がかかるっぽい。
毎回呼び出すと8.15秒で、ベクトル化したRと変わらん感じだった。
なんだか素のc++を勉強したくなった。