R: come utilizzare il pacchetto microbenchmark per misurare il tempo di esecuzione
È possibile utilizzare il pacchetto microbenchmark in R per confrontare il tempo di esecuzione di diverse espressioni.
A tale scopo è possibile utilizzare la seguente sintassi:
library (microbenchmark) #compare execution time of two different expressions microbenchmark( expression1, expression2) )
L’esempio seguente mostra come utilizzare questa sintassi nella pratica.
Esempio: utilizzo di microbenchmark() in R
Supponiamo di avere il seguente frame di dati in R che contiene informazioni sui punti segnati dai giocatori di varie squadre di basket:
#make this example reproducible
set. seed ( 1 )
#create data frame
df <- data. frame (team=rep(c(' A ', ' B '), each= 500 ),
points=rnorm( 1000 , mean= 20 ))
#view data frame
head(df)
team points
1 A 19.37355
2 A 20.18364
3 A 19.16437
4 A 21.59528
5 A 20.32951
6 A 19.17953
Supponiamo ora di voler calcolare la media dei punti segnati dai giocatori di ciascuna squadra utilizzando due metodi diversi:
- Metodo 1 : utilizzare Aggregate() da Base R
- Metodo 2 : utilizzare group_by() e summarise_at() da dplyr
Possiamo usare la funzione microbenchmark() per misurare il tempo necessario per eseguire ciascuna di queste espressioni:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) Unit: milliseconds express aggregate(df$points, list(df$team), FUN = mean) df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) min lq mean median uq max neval cld 1.307908 1.524078 1.852167 1.743568 2.093813 4.67408 100 a 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928 100 b
La funzione microbenchmark() esegue ciascuna espressione 100 volte e misura le seguenti metriche:
- min : tempo minimo richiesto per l’esecuzione
- lq : quartile inferiore (25° percentile) del tempo richiesto per il completamento
- Media : tempo medio richiesto per l’esecuzione
- mediana : tempo di esecuzione medio
- uq : quartile superiore (75° percentile) del tempo richiesto per l’esecuzione
- max : tempo massimo richiesto per l’esecuzione
- neval : numero di volte in cui ciascuna espressione è stata valutata
In genere, esaminiamo solo il tempo medio o mediano necessario per eseguire ciascuna espressione.
Dal risultato possiamo vedere:
- È stato necessario un tempo medio di 1.852 millisecondi per calcolare la media dei punti della squadra utilizzando il metodo basato su R.
- Per calcolare la media dei punti per squadra utilizzando il metodo dplyr è stato necessario un tempo medio di 9.946 millisecondi .
Sulla base di questi risultati, concludiamo che il metodo base R è significativamente più veloce.
Possiamo anche utilizzare la funzione boxplot() per visualizzare la distribuzione dei tempi necessari per eseguire ciascuna espressione:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team results <- microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) #create boxplot to visualize results boxplot(results, names=c(' Base R ', ' dplyr '))
Dai box plot possiamo vedere che il metodo dplyr impiega in media più tempo per calcolare il valore del punto medio per squadra.
Nota : in questo esempio, abbiamo utilizzato la funzione microbenchmark() per confrontare il tempo di esecuzione di due diverse espressioni, ma nella pratica puoi confrontare tutte le espressioni che desideri.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in R:
Come cancellare l’ambiente in R
Come cancellare tutti i grafici in RStudio
Come caricare più pacchetti in R