2015-05-08 1 views
14

Я пытался найти способ справиться с способностью Postgresql представлять Infinity и -Infinity в их отметках времени при использовании RPostgreSQL для переноса данных в R. По пути я обнаружил странное поведение при попытке представить бесконечные даты в R .Почему даты в бесконечности выглядят как NA, но действуют как даты?

Я могу попытаться создать дату в отрицательной и положительной бесконечности следующим образом:

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

Они оба кажутся NAs. Однако, сравнивая их, кажется, есть понимание того, что один меньше другого.

❥ 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 (date). Большинство языков программирования в любом случае обрабатывают такие значения, как особые случаи (как объекты). –

ответ

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 и добавлять специальные случаи для +/- бесконечности.

Смежные вопросы