2015-05-08 26 views
14

我试图找出处理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 

他们都显得港定居。但是,在比较它们时,似乎有一种理解,即一种比另一种要少。

❥ 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 

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

+0

我不是R方面的专家,但我的猜测是,这些内部表示为特殊情况,您可以通过始终表示所有内容都在-Infinity(日期)之后并且所有内容都在Infinity(日期)之前轻松地进行比较。大多数编程语言总是将这些值视为特殊情况(无论如何都是对象)。 –

回答

13

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

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

如果你希望他们打印出来的效果,你可以重写print.Date方法和+/-无穷添加特殊情况。

相关问题