Problema
Queremos evaluar el tiempo de ejecución de varias expresiones en R. Partimos del ejemplo de la entrada anterior, en la que seleccionábamos un porcentajes de filas de un data frame mediante diferentes métodos.
Utilizamos el conjunto de datos ToothGrowth, que cuenta con 60 filas. Lo partiremos en dos, la primera con un 70% de las filas (42) y la segunda con un 30% (18 filas). Aunque en este ejemplo no es necesario, empleamos la función round, para que en el caso de que por ejemplo el número de filas sea 6,6 devuelva 7 filas en lugar de 6.
Opciones
head(ToothGrowth, round(nrow(ToothGrowth)*0.7))
tail(ToothGrowth, round(nrow(ToothGrowth)*0.3))
porcentaje = round(0.7*nrow(ToothGrowth))
ToothGrowth[1:porcentaje,]
ToothGrowth[-(1:porcentaje),]
porcentaje = round(0.7*nrow(ToothGrowth))
library(dplyr)
slice(ToothGrowth, 1:porcentaje)
slice(ToothGrowth, -(1:porcentaje))
Medición
library(microbenchmark)
library(ggplot2)
porcentaje <- round(0.7*nrow(ToothGrowth))
rdo <- microbenchmark(
opcion1 = head(ToothGrowth, round(nrow(ToothGrowth) * 0.7)),
opcion2 = ToothGrowth[1:porcentaje,],
opcion3 = slice(ToothGrowth, 1:porcentaje))
Cargamos microbenchmark para la medición y ggplot2 para la representación gráfica. Separamos cada expresión que deseamos evaluar por una coma. Por defecto microbenchmark ejecuta cada expresión 100 veces (neval en el resultado). Para modificar el número de veces incluimos el argumento times.
Resultado
rdo
Unit: microseconds
expr min lq mean median uq max neval
opcion1 134.933 147.156 203.3685 179.6675 225.867 1017.378 100
opcion2 98.756 105.112 138.9135 116.3565 161.334 418.490 100
opcion3 978.756 1026.912 1096.2901 1056.2450 1087.289 3765.912 100
Los resultados incluyen 8 columnas. El mínimo (min), cuartil inferior (lq), media (mean) ,mediana (median), cuartil superior (uq), y máximo (max). Nos centraremos en la mediana, y en los cuartiles inferior y superior (lq y uq) para hacernos una idea de la variabilidad. En nuestro ejemplo vemos que la mejor opción en todos los parámetros y con menor variabilidad es la opción 2. También debemos prestar atención a la unidad de medida, antes de las columnas con los resultados, en nuestro ejemplo microsegundos.
Gráfico
Generamos un gráfico de tipo violín con los resultados de la medición.
autoplot(rdo)
Entradas relacionadas
- Muestra aleatoria de filas por grupos en R
- Muestra aleatoria de filas de un data frame en R
- ¿Cómo seleccionar todas las columnas de un data frame con dplyr?
- Seleccionar sólo las columnas que contengan NA en R
Referencias
No hay comentarios:
Publicar un comentario