получить время выполнения в миллисекундах в R - PullRequest
22 голосов
/ 25 сентября 2011

Я прочитал решение для этого, используя tic(), toc() functions

tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self"))
{
   type <- match.arg(type)
   assign(".type", type, envir=baseenv())
   if(gcFirst) gc(FALSE)
   tic <- proc.time()[type]         
   assign(".tic", tic, envir=baseenv())
   invisible(tic)
}

toc <- function()
{
   type <- get(".type", envir=baseenv())
   toc <- proc.time()[type]
   tic <- get(".tic", envir=baseenv())
   print(toc - tic)
   invisible(toc)
}




tic();
-----code----
toc();


elapsed 
   0.15 

Но я хотел бы получить большую точность в миллисекундах?

Также я использовал это

ptm <- proc.time()
---code
proc.time() - ptm

и получите это

   user  system elapsed 
   1.55    0.25    1.84 

Как получить больше десятичных знаков или большую точность?

Ответы [ 3 ]

33 голосов
/ 25 сентября 2011

1) Время зависит от операционной системы.В Windows вы можете получить только миллисекунды.

2) Нет необходимости определять tic() и toc(), R имеет system.time().Вот пример:

R> system.time(replicate(100, sqrt(seq(1.0, 1.0e6))))
   user  system elapsed 
  2.210   0.650   2.867 
R> 

3) Есть отличные пакеты дополнений rbenchmark и microbenchmark .

3.1) rbenchmark особенно полезен для сравнения команд, но также может использоваться напрямую:

R> library(rbenchmark)
R> x <- seq(1.0, 1.0e6); benchmark(sqrt(x), log(x))
     test replications elapsed relative user.self sys.self user.child sys.child
2  log(x)          100   5.408  2.85835      5.21     0.19          0         0
1 sqrt(x)          100   1.892  1.00000      1.62     0.26          0         0
R>

3.2) microbenchmark выделяется приизмерения с высочайшей точностью:

R> library(microbenchmark)
R> x <- seq(1.0, 1.0e6); microbenchmark(sqrt(x), log(x))
Unit: nanoseconds
     expr      min       lq   median       uq      max
1  log(x) 50589289 50703132 55283301 55353594 55917216
2 sqrt(x) 15309426 15412135 15452990 20011418 39551819
R> 

и последнее, особенно в Linux, уже дает вам наносекунды .Он также может отображать результаты и т. Д., Так что присмотритесь к этому пакету.

6 голосов
/ 15 апреля 2016

Это хорошо:

options(digits.secs = 6) # This is set so that milliseconds are displayed

start.time <- Sys.time()

...Relevant code...

end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken

Взято из здесь .

0 голосов
/ 23 мая 2018

Поместите start_time перед вашим кодом и end_time после вашего кода.

т.е.

start_time <- as.numeric(as.numeric(Sys.time())*1000, digits=15) # place at start

-----code----

end_time <- as.numeric(as.numeric(Sys.time())*1000, digits=15) # place at end

end_time - start_time    # run time (in milliseconds)
...