为什么无穷大的日期看起来像 NA 但行为却像日期?

Why do dates at infinity look like NAs but act like dates?

我试图找出最好的方法来处理 Postgresql 在使用 RPostgreSQL 将数据导入 R 时在时间戳中表示 Infinity-Infinity 的能力。当我试图在 R 中表示无限日期时,我发现了一些奇怪的行为。

我可以尝试通过以下方式创建负无穷大和正无穷大的日期:

❥ as.Date(-1/0, origin="1970-01-01")
[1] NA
❥ as.Date(1/0, origin="1970-01-01")
[1] NA

他们似乎都是 NA。不过一对比,就好像有一个比一个少的理解。

❥ as.Date(-1/0, origin="1970-01-01") < as.Date(1/0, origin="1970-01-01")
[1] TRUE
❥ as.Date(-1/0, origin="1970-01-01") > as.Date(1/0, origin="1970-01-01")
[1] FALSE
❥ as.Date(1/0, origin="1970-01-01") > as.Date("1970-01-01")
[1] TRUE
❥ as.Date(1/0, origin="1970-01-01") < as.Date("1970-01-01")
[1] FALSE

如果它们都转换为 NA,R 如何知道差异?

它们不会转换为 NA,这就是它们的打印方式。

R> d <- as.Date(-Inf, origin="1970-01-01")
R> is.na(d)
# [1] FALSE
R> is.infinite(d)
# [1] TRUE

如果您希望它们以不同方式打印,您可以重写 print.Date 方法并为 +/- 无穷大添加特殊情况。