【问题标题】:Print the time a script has been running in R [duplicate]打印脚本在 R 中运行的时间 [重复]
【发布时间】:2015-11-13 00:38:06
【问题描述】:

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

我的想法是:

old = getCurrentTime()

# Do the rest of my script

(new = getCurrentTime() - old)

我不知道这是否有意义,但似乎最好的方法是通过比较脚本的开始时间和时间和结束并打印区别。但是,我不确定如何在 R 中获取时间、获取差异并将其格式化为 hh:mm:ss

【问题讨论】:

  • 您的最后一段听起来像是您想要链接问题中的答案。如果这不正确,请编辑以准确显示您想要什么,我们将重新提出问题。

标签: r time


【解决方案1】:

您可以使用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

不过,还有 microbenchmark 包,可以使用多次试验等进行更复杂/准确的计时。

【讨论】:

  • 我想他想在一些代码中知道,而不是在一些代码之后。
  • 不确定你的意思,但考虑到 OP 询问 “我不确定如何在 R 中获取时间,获取差异,并将其格式化为 hh:mm:ss” 我觉得这个答案直接解决了所有问题
  • 假设您获取一个 .R 文件,并且您希望在程序运行时间歇地(即每 10 秒)打印运行时间。例如,当您在 linux 上安装包时,下载速度和经过的时间会在包下载时打印出来。
  • @nathanesau 不,arvi 的回答是我想要的。通过在脚本顶部声明 old 并在末尾声明 new ,您可以获得脚本运行所需的时间。
【解决方案2】:

您的一般方法是正确的,并且可能是实现此目的的最常规方法,无论使用哪种编程语言。但是,减去两个 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 = ":")
}

(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"

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2014-09-10
    • 2014-01-19
    • 2017-09-11
    • 2018-08-06
    • 1970-01-01
    • 2017-01-18
    • 2023-04-03
    相关资源
    最近更新 更多