2017-09-01 69 views
2

ymd from lubridate,默認值tzUTC。我不知道確切的更改時間,但我知道在1.5版本中默認值是UTC,但是在1.5.8版本中,默認值現在是NULL如何處理lubridate的默認值ymd

這改變的ymdPOSIXct對象Date對象,打破了很多我的代碼,我靠有POSIXct對象的輸出,但是現在有一個Date。有沒有一種方便的方法來實現向後兼容,還是我需要將tz='UTC'添加到所有依賴於此的舊代碼?

回答

2

寫一個包裝與ymd_hms取代ymd的量,默認仍然tz = "UTC"

library(lubridate) 
ymd2 = function(x){ 
    ymd_hms(paste(x, "00:00:00")) 
} 

ymd2("2017/3/4") 
#[1] "2017-03-04 UTC" 

class(ymd2("2017/3/4")) 
#[1] "POSIXct" "POSIXt" 
+0

是的,我認爲有關使包裝等'ymd2 <-function(x)的YMD(X,TZ = 'UTC' )'但是我希望在不使用'ymd'的每一段代碼中都這樣做。 –

+0

那麼你可以命名包裝器'ymd',然後用裏面的'tz'參數調用'lubridate :: ymd',以避免名稱衝突...然後你不必在現有代碼中替換所有'ymd'調用,只需加載該功能即可。否則,您可能會使用舊版本的'lubridate'卡住。在這種情況下'packrat'包可能會有用。 – mikeck

+1

您還可以發佈功能請求以在'options'中獲得默認的tz選項:https://github.com/tidyverse/lubridate/issues。我懷疑你是唯一有這個版本兼容性問題的人。 – mikeck