在R中获得以毫秒为单位的执行时间

cMi*_*nor 22 benchmarking r execution-time milliseconds

我已经阅读了这个解决方案 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 
Run Code Online (Sandbox Code Playgroud)

但我想在几毫秒内获得很多精度?

我也在用这个

ptm <- proc.time()
---code
proc.time() - ptm
Run Code Online (Sandbox Code Playgroud)

得到这个

   user  system elapsed 
   1.55    0.25    1.84 
Run Code Online (Sandbox Code Playgroud)

如何获得更多小数或更精确?

Dir*_*tel 33

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> 
Run Code Online (Sandbox Code Playgroud)

3)有优秀的附加软件包rbenchmarkmicrobenchmark.

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>
Run Code Online (Sandbox Code Playgroud)

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> 
Run Code Online (Sandbox Code Playgroud)

最后一个,特别是在Linux上,已经给你纳秒.它还可以绘制结果等,以便仔细查看该包.

  • 难道你不能把这些代码行括在{...}中吗? (6认同)

Den*_*lev 6

这个很好:

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
Run Code Online (Sandbox Code Playgroud)

取自这里.

  • 您需要设置选项(digits.secs = 6)才能看到Sys.time()确实包含毫秒数据.如果没有,它将只显示第二级数据,这使人们误以为这没有毫秒信息. (2认同)