2015-05-08 25 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方法和+/-無窮添加特殊情況。

相關問題