あなたの例で取られたほとんどの時間は、ベクターを構築することでした。しかし、で説明されているように、Rcppを使ってこのようなことを時々スピードアップすることができます。
any()
は、です。それをC++/Rcppで書き直すと、実際にはC++への呼び出しにオーバーヘッドがありますが、非遅延(TRUE-last)のケースではスピードアップします(TRUE-firstの場合)ベースRでany()
はNA
値のチェックのようないくつかの他のものを行う必要があるため、高速化があること...)
x3 <- c(TRUE, rep(FALSE,1e7)) ## fast if lazy
x4 <- c(rep(FALSE,1e7),TRUE)
library(Rcpp)
cppFunction("
bool any_C(LogicalVector x) {
return is_true(any(x));
}")
library(microbenchmark)
microbenchmark(any(x3),any(x4),any_C(x3),any_C(x4))
expr min lq mean median uq max
any(x3) 1.224 1.6210 7.70592 9.1690 10.6430 53.431
any(x4) 18255.964 19069.7740 20104.43401 19501.6215 20028.3585 35843.360
any_C(x3) 2.850 4.3735 15.94341 14.4195 24.1195 85.295
any_C(x4) 7782.388 8279.9395 8832.22210 8700.9380 9161.2205 12339.606
あなたの例では、時間のほとんどは、ベクターを構築取られています! –
Derp!これを削除する... – Ben
まだ削除しないでください。 –