为什么无穷大的日期看起来像 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
方法并为 +/- 无穷大添加特殊情况。
我试图找出最好的方法来处理 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
方法并为 +/- 无穷大添加特殊情况。