R: como usar o pacote microbenchmark para medir o tempo de execução


Você pode usar o pacote microbenchmark em R para comparar o tempo de execução de diferentes expressões.

Você pode usar a seguinte sintaxe para fazer isso:

 library (microbenchmark)

#compare execution time of two different expressions
microbenchmark(
  expression1,
  expression2)
)

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: Usando microbenchmark() em R

Suponha que temos o seguinte quadro de dados em R que contém informações sobre os pontos marcados por jogadores de vários times de basquete:

 #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

Agora, suponha que queiramos calcular a média de pontos marcados pelos jogadores de cada equipe usando dois métodos diferentes:

  • Método 1 : Use Aggregate() da Base R
  • Método 2 : Use group_by() e summarise_at() do dplyr

Podemos usar a função microbenchmark() para medir o tempo que leva para executar cada uma destas expressões:

 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

A função microbenchmark() executa cada expressão 100 vezes e mede as seguintes métricas:

  • min : Tempo mínimo necessário para execução
  • lq : quartil inferior (percentil 25) de tempo necessário para concluir
  • Média : Tempo médio necessário para execução
  • mediana : tempo médio de execução
  • uq : quartil superior (percentil 75) de tempo necessário para execução
  • max : Tempo máximo necessário para execução
  • neval : Número de vezes que cada expressão foi avaliada

Normalmente, observamos apenas o tempo médio ou mediano necessário para executar cada expressão.

Pelo resultado podemos ver:

  • Demorou em média 1.852 milissegundos para calcular a média de pontos da equipe usando o método baseado em R.
  • Demorou em média 9,946 milissegundos para calcular a média de pontos por equipe usando o método dplyr.

Com base nestes resultados, concluímos que o método base R é significativamente mais rápido.

Também podemos usar a função boxplot() para visualizar a distribuição dos tempos necessários para executar cada expressão:

 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 '))

O boxplot do pacote microbenchmark fornece R

Nos box plots, podemos ver que o método dplyr leva mais tempo, em média, para calcular o valor médio de pontos por equipe.

Nota : Neste exemplo, usamos a função microbenchmark() para comparar o tempo de execução de duas expressões diferentes, mas você pode comparar quantas expressões quiser na prática.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em R:

Como limpar o ambiente em R
Como limpar todos os gráficos no RStudio
Como carregar vários pacotes em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *