¿Por qué la función mediana R estándar es mucho más lenta que una alternativa simple de C ++?
Hice la siguiente implementación de la mediana enC++
y lo usé enR
víaRcpp
:
// [[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;
}
Si posteriormente comparo el rendimiento con la función mediana estándar R integrada, obtengo los siguientes resultados a través demicrobenchmark
> 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
¿Por qué la función mediana estándar es mucho más lenta? Esto no es lo que esperaría ...