为什么无限远的日期看起来像NA,但就像日期一样?

jed*_*jed 15 r date infinity

当我试图在R中表示无限日期时,我试图找出处理Postgresql表示能力的最佳方法,Infinity以及用于将数据传输到R -Infinity中的时间戳RPostgreSQL.在此过程中我发现了一些奇怪的行为.

我可以尝试以下列方式在负和正无穷大处创建日期:

? as.Date(-1/0, origin="1970-01-01")
[1] NA
? as.Date(1/0, origin="1970-01-01")
[1] NA
Run Code Online (Sandbox Code Playgroud)

它们似乎都是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
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ich 13

它们没有转换成NA,就是它们的打印方式.

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

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