2015-05-08 2 views
14

Ich habe versucht, herauszufinden, die beste Möglichkeit, mit PostgreSQL und -Infinity in ihren Zeitstempeln zu arbeiten, wenn RPostgreSQL Daten in R zu bringen. Entlang der Weg fand ich ein seltsames Verhalten bei dem Versuch, unendliche Daten in R darzustellen .Warum sehen Daten im Unendlichen wie NAs aus, sondern verhalten sich wie Daten?

ich kann versuchen, ein Datum zu negativen und positiven Unendlichkeit in der folgenden Art und Weise zu erstellen:

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

beide NAs zu sein scheinen. Wenn man sie jedoch vergleicht, scheint man zu verstehen, dass man weniger ist als das andere.

❥ 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 

Woher kennt R den Unterschied, wenn beide zu NA konvertieren?

+0

Ich bin kein Experte für R, aber meine Vermutung ist, dass diese intern als Sonderfälle dargestellt werden und Sie können sie einfach vergleichen, indem Sie immer sagen, dass alles nach -Infinity (Datum) und alles vor Infinity (Datum) ist. Die meisten Programmiersprachen behandeln diese Werte ohnehin als Spezialfälle (als Objekte sowieso). –

Antwort

13

Sie konvertieren nicht zu NA, das ist nur, wie sie gedruckt werden.

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

Wenn Sie wollen, anders drucken, können Sie die print.Date Methode überschreiben und Sonderfälle für +/- unendlich hinzufügen.

Verwandte Themen