我尝试使用Sys.time
来获取两点之间的时间。但是,它不会以我喜欢的方式输出。
现在的样子:
a <- Sys.time
...running stuff between these two points...
b <- Sys.time
c <- b - a
c
Time difference of 1.00558 hours
我只想要数字和单位。我知道要获得我能做的数字:
c[[1]]
然而,有时c
的结果会给我几秒或几分钟。我只想要具有数字的实例以及单位为小时的实例。有没有人知道如何使用Sys.time()(或任何替代方案)得到类似下面的内容:
if (units == "hours")
{
if (number => 1)
{
#do something
}
}
答案 0 :(得分:2)
使用基数R的difftime
可以获得不同单位的时差。休息是格式化。
a = Sys.time()
Sys.sleep(5) #do something
b = Sys.time()
paste0(round(as.numeric(difftime(time1 = b, time2 = a, units = "secs")), 3), " Seconds")
#[1] "5.091 Seconds"
答案 1 :(得分:1)
您可以将所有内容评估为system.time
函数的参数。它将以秒为单位为您提供经过的时间。
paste0(system.time( rnorm(1000000, 0, 1) )[3] / 3600, " hours")
# "2.58333333334172e-05 hours"
或者,您可以在评论中使用Frank的建议。 difftime(b, a, units = "hours")
这可能是大多数情况下的主要解决方案
答案 2 :(得分:0)
也许你可以试试´tictoc´套餐。 如文档中所述,您可以执行以下操作:
enter code here
这样,tic()
#Do something
toc(log = TRUE, quiet = TRUE)
#Put the result in a log
log.txt <- tic.log(format = TRUE)
#Extract only the value
res <- gsub( " sec elapsed", "", unlist(log.txt))
#Clear the log
tic.clearlog()
只给你一个值,以秒为单位,所以有几个小时就很简单了。
此外,如果你没有清除日志,你可以放置res
和tic()
的继承,并将所有内容放在toc()
中,然后log.txt
会给你一个向量每次迭代的值以秒为单位的字符串非常有用
答案 3 :(得分:0)
包tictoc
简化了这种时机。它不会返回小时数,但我们可以创建一个新功能,将其第二次测量转换为小时。
library(tictoc)
toc_hour <- function() {
x <- toc()
(x$toc - x$tic) / 3600
}
您通常使用tic()
启动计时器并使用toc()
停止计时器。
tic()
Sys.sleep(2)
toc()
# 2.02 sec elapsed
调用toc_hour()
代替toc()
会返回已经过的小时数。
tic()
Sys.sleep(2)
toc_hour()
# 2.25 sec elapsed
# elapsed
# 0.000625
它仍会打印小时数以上的秒数,但如果您捕获结果,它将只存储下游分析的小时数。
tic()
Sys.sleep(2)
x <- toc_hour()
if(x < 1) {print("This took under an hour")}
答案 4 :(得分:0)
tictoc 包通常返回秒。该软件包中的其他解决方案手动将其转换为其他单位,但我发现它看起来仍然不正确。相反,使用 toc() 中的内置 func.toc 参数来更改输出。例如:
toc_min <- function(tic,toc,msg="") {
mins <- round((((toc-tic)/60)),2)
outmsg <- paste0(mins, " minutes elapsed")
}
然后:
tic()
Sys.sleep(1)
toc(func.toc=toc_min)
返回
0.02 minutes elapsed
答案 5 :(得分:-1)
我认为lubridate是最快的解决方案:
start <- Sys.time()
## Do Stuff here
end <- Sys.time()
elapsed <- lubridate::ymd_hms(end) - lubridate::ymd_hms(start)
message(elapsed)
它应该返回一些有用的东西,如: “时差为12.1小时”