Время выполнения функции измерения в 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

Ответ 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 мс.