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 ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage