2014-12-04 36 views
1

當我通過另一個difftime對象延伸difftimes的矢量,然後它似乎是添加的項目的單元將被忽略,無需轉換重寫:R添加到difftime矢量忘掉單位

> 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 
+0

這種行爲通過R是超爛更改單位!在這之後,我突然覺得生活更糟。 – rescdsk 2015-05-27 17:47:59

+1

我也認爲這應該在文檔中修復或至少發出警告。 – laubbas 2015-05-28 13:44:27

回答

0

help("difftime")

如果單位=「汽車「,則選擇一組合適的單位,其中最大可能(不包括」周「),其中所有絕對差異均大於1。

units = "auto"是默認值。所以對於1和61秒的差別,如果你要選擇分鐘,

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

其中之一是小於1,因此默認情況下,因爲你沒有指定單元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 
+0

好的,謝謝,這很有道理。所以這些單位只是向量的一個屬性,當我分配一個新值時,它不會被檢查。我想我期望這個任務更聰明 - 畢竟,當我向字符串添加一個字符串時,會進行相當多的類型轉換。 – laubbas 2014-12-04 12:34:48

+0

你可以用'units(d)< - 「mins」'來改變單位,它會被重新計算 – 2014-12-04 12:41:39