Comparing Performance in R Using Microbenchmark

This post is a very simple display of how to use microbenchmark in R. Other sites might have longer and more detailed posts, but this post is primarily to 'spread the word' about this useful function, and show how to plot it. An alternative version of this post exists in Microsoft's Azure Notebooks, as Performance Testing Results with Microbenchmark

Load Libraries

Memoise as part of the code to test, microbenchmark to show usage, and ggplot2 to plot the result.

 library(memoise)  
 library(microbenchmark)  
 library(ggplot2)  

Create Functions

Generate several functions with varied performance times, a base function plus functions that leverage vectorization and memoisation.

 # base function  
 monte_carlo = function(N) {  
   hits = 0  
   for (i in seq_len(N)) {  
     u1 = runif(1)  
     u2 = runif(1)  
     if (u1 ^ 2 > u2)  
       hits = hits + 1  
     }  
   return(hits / N)  
 }  
   
 # memoise test function   
 monte_carlo_memo <- memoise(monte_carlo)  
   
 # vectorize function  
 monte_carlo_vec <- function(N) mean(runif(N) ^ 2 > runif(N))  
   
 # memoise vectorized function  
 monte_carlo_vec_memo <- memoise(monte_carlo_vec)  

Run Tests

Using microbenchmark, loop 100 times through each function.

 n <- 999999  
 comparison <- microbenchmark(times = 100  
                , memoised = system.time(monte_carlo_memo(n))  
                , vectorised = system.time(monte_carlo_vec(n))  
                , both = system.time(monte_carlo_vec_memo(n))) 
 comparison

Display Results:

Display the results of the microbenchmark run.

 Unit: milliseconds  
       expr      min        lq     mean   median       uq        max  neval  
   memoised    45.88     51.55   109.45    57.93    63.04    5027.95    100  
 vectorised   176.18    226.01   235.94   236.47   248.78     332.85    100  
       both    46.23     50.67    59.60    54.74    62.86     224.50    100  

Plot

Using autoplot, display the results.

 autoplot(comparison)

Comments

Popular posts from this blog

Charting Correlation Matrices in R

Cultural Dimensions and Coffee Consumption

Developers in New York City by Zip Code