Время выполнения функции измерения в R
Существует ли стандартизированный способ в R измерения времени выполнения функции?
Очевидно, что я могу взять system.time
до и после выполнения, а затем принять разницу, но я хотел бы знать, есть ли какой-то стандартизованный способ или функция (хотелось бы не изобретать колесо).
Кажется, я помню, что однажды использовал что-то вроде:
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
Ответы
Ответ 1
Другим возможным способом сделать это будет использование Sys.time():
start.time <- Sys.time()
...Relevent codes...
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
Не самый элегантный способ сделать это, по сравнению с answere выше, но определенно способ сделать это.
Ответ 2
Встроенная функция system.time()
сделает это.
Используйте как: system.time(result <- myfunction(with, arguments))
Ответ 3
Как сказал Андри, system.time()
отлично работает. Для короткой функции я предпочитаю вставлять replicate()
в нее:
system.time( replicate(10000, myfunction(with,arguments) ) )
Ответ 4
Несколько более удобный способ измерения времени выполнения - использовать rbenchmark. Этот пакет (легко) позволяет вам указать, сколько раз повторять ваш тест, и будет ли относительный контрольный показатель.
См. также связанный с этим вопрос в stats.stackexchange
Ответ 5
Существует также proc.time()
Вы можете использовать так же, как Sys.time
, но он дает аналогичный результат system.time
.
ptm <- proc.time()
#your function here
proc.time() - ptm
основное различие между использованием
system.time({ #your function here })
заключается в том, что метод proc.time()
все еще выполняет вашу функцию вместо того, чтобы просто измерять время...
и, кстати, мне нравится использовать system.time
с {}
внутри, чтобы вы могли поместить множество вещей...
Ответ 6
Пакет "tictoc" дает вам очень простой способ измерения времени выполнения. Документация находится в: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf.
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
toc()
Чтобы сохранить прошедшее время в переменной, вы можете сделать:
install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
exectime <- toc()
exectime <- exectime$toc - exectime$tic
Ответ 7
Вы можете использовать функции MATLAB tic
- toc
, если хотите. См. Этот другой вопрос SO
Функция секундомера в R
Ответ 8
Хотя другие решения полезны для одной функции, я рекомендую следующий фрагмент кода, который является более общим и эффективным:
Rprof ( tf <- "log.log", memory.profiling = TRUE )
your code must be in between
Rprof ( NULL ) ; print ( summaryRprof ( tf ) )
Ответ 9
microbenchmark
- это легкий (~ 50 кБ) пакет и более или менее стандартный способ в R для сравнения нескольких выражений и функций:
microbenchmark(myfunction(with,arguments))
Например:
> microbenchmark::microbenchmark(log10(5), log(5)/log(10), times = 10000)
Unit: nanoseconds
expr min lq mean median uq max neval cld
log10(5) 0 0 25.5738 0 1 10265 10000 a
log(5)/log(10) 0 0 28.1838 0 1 10265 10000
Здесь оба выражения были оценены 10000 раз, при среднем выполнении около 20-30 мс.