首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用difftime()时,如何提取时间单位?

在使用difftime()时,如何提取时间单位?
EN

Stack Overflow用户
提问于 2019-01-17 02:03:54
回答 3查看 1.4K关注 0票数 6

我目前正在运行一个for循环代码,在每个循环的末尾,我正在测量循环的持续时间,并打印一条消息,告诉用户这个循环花费了多长时间。

为了获得我所用的持续时间

代码语言:javascript
复制
duration <- difftime(end_time, start_time) 

我就是这样打印这份声明的

代码语言:javascript
复制
print(paste("Loop", i, "took", duration, "to run.")). 

问题是每个循环的持续时间从30秒到1个小时不等。将持续时间放入粘贴中,只会将其转化为一个没有单位的数字。

例如:

代码语言:javascript
复制
print(paste("Loop", i, "took", duration, "to run.")). 
"Loop 5 took 10.5 to run"

如何从difftime()中获得单元,以便得到类似于:“循环5”运行了10.5分钟“

PS:有些人可能建议通过在difftime()中声明" unit“参数来标准化工期,但我希望用户能够很容易地理解工期,这就是为什么我将单元设置为默认的"auto”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-17 02:20:27

units调用duration获取单元,并通过添加duration获得数值

代码语言:javascript
复制
print(paste("Loop", i, "took", round(duration[[1]], 2),  units(duration), "to run."))

下面是一个示例:

代码语言:javascript
复制
start_time <- Sys.time()

# few seconds later
end_time <- Sys.time()

duration <- difftime(end_time, start_time)

print(paste("Loop", 1, "took", round(duration[[1]], 2),  units(duration), "to run."))

结果:

代码语言:javascript
复制
[1] "Loop 1 took 6.97 secs to run."

根据持续时间的范围,该单元将是自动的。参见下面的示例:

代码语言:javascript
复制
start_time <- Sys.time()

# few days later
end_time <- as.Date("2019-01-23")

duration <- difftime(end_time, start_time)

print(paste("Loop", 1, "took", round(duration[[1]], 2),  units(duration), "to run."))

结果:

代码语言:javascript
复制
> print(paste("Loop", 1, "took", round(duration[[1]], 2),  units(duration), "to run."))
[1] "Loop 1 took 5.9 days to run."
票数 8
EN

Stack Overflow用户

发布于 2019-01-17 02:19:38

一种方法是捕获来自difftime的输出,因为它使用capture.output

代码语言:javascript
复制
start_time <- as.POSIXct('2019-01-01 02:34:00')
end_time <- as.POSIXct('2019-01-01 03:14:00')

paste("Loop 5 took", capture.output(difftime(end_time, start_time)), "to run.")
#[1] "Loop 5 took Time difference of 40 mins to run."

现在您可以更改输出以使其有意义,例如从输出中删除“时间差”。

代码语言:javascript
复制
sent <- capture.output(difftime(end_time, start_time))
paste("Loop 5 took",sub("Time difference of ","", sent) , "to run.")
#[1] "Loop 5 took 40 mins to run."

用于另一个输入

代码语言:javascript
复制
start_time <- as.POSIXct('2019-01-01 02:34:00')
end_time <- as.POSIXct('2019-01-01 02:34:50')

sent <- capture.output(difftime(end_time, start_time))
paste("Loop 5 took",sub("Time difference of ","", sent) , "to run.")
#[1] "Loop 5 took 50 secs to run."
票数 3
EN

Stack Overflow用户

发布于 2019-01-17 02:22:11

您应该能够通过units(duration)实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54227985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档