我對R,一個chron對象和sapply函數有問題。我改變了默認原點:用chron和sapply在R上的可能的錯誤
chron_start <- chron("01/01/2010", "00:30:00",origin.=c(month=1, day=1, year=1900))
ch <- chron_start+(0:(365*24-1))/24
現在,如果我跑:
> sprintf("%s", years(ch[1]))
[1] "2010"
但是,如果我有sapply反覆運行它,我得到:
> anios <- sapply(ch, function(x){sprintf("%s", years(x))})
> anios[1]
[1] "2080"
所以它得到70年提前,這是我的起源(1900年)和默認起源(1970年)之間的差異。
我想問你是否發生這種情況,爲了發送錯誤報告,或者如果有解釋這種行爲,以及如何解決它。
在此先感謝!
P.S .:我的R版本是「R版本3.4.2(2017-09-28)」,運行在GNU/Linux openSUSE Leap 42.2 64位上。 Chron軟件包版本是2.3-45
我在R 3.4.1上得到了這個行爲在Windows 7與Chron 2.3-50。 –
'sapply'(像'lapply')應該作用於'list'對象。如果不是,則調用'as.list'。看到'as.list(ch)'將失去任何關於原點的跡象。所以'年代'將會採用標準的POSIX起源(1970年1月1日)。另外,在你的例子中,你可以簡單地嘗試'sprintf(「%s」,years(ch))' – nicola
實際上我正在做的比這個有點複雜,所以'sprintf(「%s」,years(ch)) '不適合我。我剛剛通過做循環來解決這個問題 –