Почему даты в бесконечности выглядят как NA, но действуют как даты?

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

Ответы

Ответ 1

Они не конвертируются в NA, а именно, как они печатаются.

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

Если вы хотите, чтобы они печатались по-другому, вы можете переопределить метод print.Date и добавить специальные случаи для +/- бесконечности.