打印脚本在R中运行的时间

Bra*_*roy 3 time r

对于简单的自制基准测试,我想在我的R脚本中添加一个计时器,以便我知道它运行了多长时间.这是一个在大量数据上释放的脚本,因此可能需要一个多小时才能完成.因此,我正在寻找一种方法,告诉我脚本运行的确切时间.

我得到的想法是:

old = getCurrentTime()

# Do the rest of my script

(new = getCurrentTime() - old)
Run Code Online (Sandbox Code Playgroud)

我不知道这是否有意义,但似乎最好的方法是在没有计数器在后台运行的情况下,通过比较脚本的开始时间和时间与结束并打印差异.但是,我不确定如何在R中获取时间,获得差异并将其格式化hh:mm:ss.

arv*_*000 8

您可以使用 Sys.time()

old <- Sys.time() # get start time

# some code
#...

# print elapsed time
new <- Sys.time() - old # calculate difference
print(new) # print in nice format
Run Code Online (Sandbox Code Playgroud)

然而,还有一个microbenchmark包,用于使用多次试验等更复杂/准确的计时.


nru*_*ell 6

您的一般方法是正确的,并且可能是实现此目的的最传统方法,无论编程语言如何。但是,减去两个POSIXt对象将得到一个 类 对象difftime,其中自动选择测量单位(取决于差异的大小),而不是您正在寻找的“HH:MM:SS”格式。编写返回这种格式的函数非常简单,例如

hms_span <- function(start, end) {
  dsec <- as.numeric(difftime(end, start, unit = "secs"))
  hours <- floor(dsec / 3600)
  minutes <- floor((dsec - 3600 * hours) / 60)
  seconds <- dsec - 3600*hours - 60*minutes
  paste0(
    sapply(c(hours, minutes, seconds), function(x) {
      formatC(x, width = 2, format = "d", flag = "0")
    }), collapse = ":")
}
Run Code Online (Sandbox Code Playgroud)
(t0 <- Sys.time() - 3600 * 8.543)
#[1] "2015-08-19 03:48:36 EDT"
(t1 <- Sys.time())
#[1] "2015-08-19 12:19:24 EDT
R> hms_span(t0, t1)
#[1] "08:32:34"
Run Code Online (Sandbox Code Playgroud)