R添加到difftime向量会忘记单位

R添加到difftime向量会忘记单位,r,datetime,vector,seconds,minute,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) &

当我通过另一个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
这是在R3.1.0中。对这种行为有合理的解释吗?我只是想以这种方式存储一些时间差,以备日后使用,根本没想到会出现这种情况。我在任何地方都找不到这个文件

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

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

如果units=“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"

d好的,谢谢,这很有道理。因此,单位只是向量的一个属性,当我指定一个新值时,它不会被检查。我想我希望这个赋值更智能——毕竟,当我向数字向量添加字符串时,会有相当多的类型转换。你可以用
units(d)来更改单位。用R来改变单位的行为是非常糟糕的!在这件事发生后,我突然觉得生活糟糕多了。我也认为这应该得到一个修复,或者至少在文档中得到一个警告。
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