Warum ist die Standard-R-Medianfunktion so viel langsamer als eine einfache C ++ - Alternative?
Ich habe die folgende Implementierung des Medians in @ durchgefühC++
und und verwendet es inR
viaRcpp
:
// [[Rcpp::export]]
double median2(std::vector<double> x){
double median;
size_t size = x.size();
sort(x.begin(), x.end());
if (size % 2 == 0){
median = (x[size / 2 - 1] + x[size / 2]) / 2.0;
}
else {
median = x[size / 2];
}
return median;
}
Wenn ich anschließend die Leistung mit der standardmäßig eingebauten R-Median-Funktion vergleiche, erhalte ich die folgenden Ergebnisse übermicrobenchmark
> x = rnorm(100)
> microbenchmark(median(x),median2(x))
Unit: microseconds
expr min lq mean median uq max neval
median(x) 25.469 26.990 34.96888 28.130 29.081 518.126 100
median2(x) 1.140 1.521 2.47486 1.901 2.281 47.897 100
Warum ist die Standard-Medianfunktion so viel langsamer? Das würde ich nicht erwarten ...