如何处理lubridate的默认值ymd
问题描述:
ymd
from lubridate,默认值tz
是UTC
。我不知道确切的更改时间,但我知道在1.5版本中默认值是UTC,但是在1.5.8版本中,默认值现在是NULL
。如何处理lubridate的默认值ymd
这改变的ymd
从POSIXct
对象Date
对象,打破了很多我的代码,我靠有POSIXct
对象的输出,但是现在有一个Date
。有没有一种方便的方法来实现向后兼容,还是我需要将tz='UTC'
添加到所有依赖于此的旧代码?
答
写一个包装与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"
是的,我认为有关使包装等'ymd2
那么你可以命名包装器'ymd',然后用里面的'tz'参数调用'lubridate :: ymd',以避免名称冲突...然后你不必在现有代码中替换所有'ymd'调用,只需加载该功能即可。否则,您可能会使用旧版本的'lubridate'卡住。在这种情况下'packrat'包可能会有用。 – mikeck
您还可以发布功能请求以在'options'中获得默认的tz选项:https://github.com/tidyverse/lubridate/issues。我怀疑你是唯一有这个版本兼容性问题的人。 – mikeck