2015-05-08 27 views
14

Postgresql'in Infinity ve -Infinity numaralarını kendi zaman damgalarında temsil etmek için RPostgreSQL numaralı telefonu kullanırken R ile sınırsız tarihleri ​​temsil etmeye çalışırken bazı garip davranışlar bulmamın yolunu bulmaya çalışıyorum. .Sonsuzluktaki tarihler neden NA'lara benziyor, ancak tarihler gibi davranıyor?

ben aşağıdaki şekilde negatif ve pozitif sonsuzda bir tarih oluşturmak deneyebilirsiniz:

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

Her ikisi UA'lar görünmektedir. Ancak onları karşılaştırırken, birinin diğerinden daha az olduğu anlaşılmaktadır.

❥ 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 

Her ikisi de NA'ya dönüşürse, R farkını nasıl biliyor?

+0

R konusunda uzman değilim, ancak tahminim bunların dahili olarak özel durumlar olarak temsil edilmesi ve herşeyin herşeyin -Infinity (tarih) sonra ve her şeyin Infinity (tarih) 'den önce olduğunu söyleyerek kolayca karşılaştırabilirsiniz. Çoğu programlama dili, bu gibi değerleri özel durumlar gibi ele alır (yine de nesneler olarak). –

cevap

13

NA'a dönüşmezler, nasıl yazdırıldıkları budur. Onları farklı yazdırmak isterseniz

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

, sen print.Date yöntemini geçersiz ve +/- sonsuzluk özel durumları ekleyebilir.

İlgili konular