Existe uma maneira padronizada em R de medir o tempo de execução da função?
Obviamente, eu posso pegar system.time
antes e depois da execução e depois tirar a diferença, mas gostaria de saber se existe alguma maneira ou função padronizada (gostaria de não inventar a roda).
Lembro-me de que já usei algo como abaixo:
somesysfunction("myfunction(with,arguments)")
> Start time : 2001-01-01 00:00:00 # output of somesysfunction
> "Result" "of" "myfunction" # output of myfunction
> End time : 2001-01-01 00:00:10 # output of somesysfunction
> Total Execution time : 10 seconds # output of somesysfunction
proc.time
em mente porquesystem.time
é uma que você precisa.Rprof
é bom. Ele fornece um perfil de todos os processos em uma parte / função de código.require(microbenchmark)
agora é (há alguns anos) o caminho padrão da comunidade para cronometrar as coisas.times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark)
. Isto faz uma estatística comparação delm
vsglm
mais de 1000 tentativas, em vez desystem.time
testar apenas uma vez.res <- microbenchmark(your code1,your code2)
e depoisprint(res)
para ver uma tabela ouggplot2::autoplot(res)
ver um boxplot! refRespostas:
Outra maneira possível de fazer isso seria usar Sys.time ():
Não é a maneira mais elegante de fazer isso, em comparação com a resposta acima, mas definitivamente uma maneira de fazê-lo.
fonte
Sys.time
, por favor, leia isto para uma advertência: Cronometrando o código R com Sys.time ()system.time()
foi mais rápido para mim. Eu acho que essa respostasystem.time()
deve ser aceita!A função
system.time()
interna fará isso.Use como:
system.time(result <- myfunction(with, arguments))
fonte
system.time()
possui um argumentogcFirst
que éTRUE
por padrão. Isso, por um lado, torna a medição um pouco mais reproduzível, mas pode gerar uma sobrecarga significativa do tempo total de execução (que não é medido, é claro).system.time(result <- myfunction(with, arguments))
e obtive 187.564 como saída - isso é em segundos ou o quê?system.time
, por favor, leia isto para uma ressalva: erros de "objeto não encontrado" e "símbolo inesperado" ao cronometrar o código R com system.time () .Como Andrie disse,
system.time()
funciona bem. Para uma função curta, prefiro colocarreplicate()
nela:fonte
Uma maneira um pouco mais agradável de medir o tempo de execução é usar o pacote rbenchmark . Este pacote (facilmente) permite que você especifique quantas vezes replicar seu teste e qual deveria ser a referência relativa.
Consulte também uma pergunta relacionada em stats.stackexchange
fonte
microbenchmark
é um pacote leve (~ 50kB) e mais ou menos uma maneira padrão no R para comparar várias expressões e funções:Por exemplo:
Aqui, ambas as expressões foram avaliadas 10000 vezes, com tempo médio de execução em torno de 25-30 ns.
fonte
Há também
proc.time()
Você pode usar da mesma maneira que,
Sys.time
mas fornece um resultado semelhante aosystem.time
.a principal diferença entre usar
é que o
proc.time()
método ainda não executar a sua função em vez de apenas medir o tempo ... e por falar nisso, eu gosto de usarsystem.time
com{}
dentro de modo que você pode colocar um conjunto de coisas ...fonte
O pacote "tictoc" oferece uma maneira muito simples de medir o tempo de execução. A documentação está em: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
Para economizar o tempo decorrido em uma variável, você pode:
fonte
Embora outras soluções sejam úteis para uma única função, recomendo o seguinte trecho de código, onde é mais geral e eficaz:
fonte
microbenchmark
ouprofvis
.Outra maneira simples, mas muito poderosa de fazer isso, é usando o pacote
profvis
. Ele não mede apenas o tempo de execução do seu código, mas fornece um detalhamento para cada função que você executa. Também pode ser usado para o Shiny.Clique aqui para alguns exemplos.
fonte
Você pode usar funções
tic
- estilo MATLABtoc
, se preferir. Veja esta outra questão SOFunção de cronômetro em R
fonte
proc.time()
… Eu gosto mais do nome fofo. =)