R加入difftime向量会忘记单位

时间:2014-12-04 11:25:28

标签: r datetime vector seconds minute

当我通过另一个difftime对象扩展difftimes的向量时,似乎忽略了所添加项的单位并且在没有转换的情况下被覆盖:

> t = Sys.time()
> d = difftime(c((t+1), (t+61)), t)
> d
Time differences in secs
[1]  1 61

> difftime(t+61, t)
Time difference of 1.016667 mins

> d[3] = difftime(t+61, t)
> d
Time differences in secs
[1]  1.000000 61.000000  1.016667
> as.numeric(d)
[1]  1.000000 61.000000  1.016667

这是在R 3.1.0中。这种行为有合理的解释吗?我只是想以这种方式存储一些时间差异以供以后使用,并且根本没想到这一点。我没有在任何地方找到这个记录..

好的,现在我只是在帮助自己总是指定单位:

> d[3] = difftime(t+61, t, unit="secs")
> d
Time differences in secs
[1]  1 61 61

1 个答案:

答案 0 :(得分:0)

来自help("difftime")

  

如果单位=" auto",则选择一组合适的单位,尽可能大(不包括"周"),其中所有绝对差异都大于一。

units = "auto"是默认值。因此,对于1到61秒的差异,如果您选择分钟,

difftime(c((t+1), (t+61)), t, units = "min")
# Time differences in mins
# [1] 0.01666667 1.01666667

其中一个不到一个,所以默认情况下,因为你没有指定R根据上面的指导为你选择的单位。此外,单位与对象一起保存

d <- difftime(c((t+1), (t+61)), t)
units(d)
# [1] "secs"

但您可以使用units<-

更改单位
d[3] <- difftime(t+61, t)
d
# Time differences in mins
# [1] 0.01666667 1.01666667 1.01666667
units(d) <- "secs"
d
# Time differences in secs
# [1]  1 61 61