为什么基R中的Date类有一个double支持

Bob*_*sen 7 optimization r date

基数R中的Date类有一个double支持:

> dput(Sys.Date())
structure(18095, class = "Date")
> class(unclass(Sys.Date()))
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

为什么不按整数?这样可以节省一半的内存(每个日期4个字节),并且似乎至少在简单的情况下可以工作:

> structure(18095L, class = "Date")
[1] "2019-07-18"
Run Code Online (Sandbox Code Playgroud)

编辑:

评论使用小数日期提及。我对一般使用小数日期持谨慎态度,但R的行为可能绝对不是您期望的:

> as.POSIXct(structure(18095.5, class = "Date"))
[1] "2019-07-18 14:00:00 CEST"
Run Code Online (Sandbox Code Playgroud)

我可以看到为什么这是正确的结果,但仍然如此。

Bob*_*sen 1

我在 data.table 问题跟踪器中偶然发现了这篇文章。Matt Dowle 提到 R 核心告诉他 double 确实用于支持小数日期并确保该类Date在诸如 之类的操作下关闭mean()。我不认为这是一个好主意,幸运的是,对于像我这样的人来说,现在有IDateTime:)