Почему NA_real_ <= Inf возвращает NA? - PullRequest
2 голосов
/ 30 марта 2019

Меня удивляют некоторые значения, возвращаемые при сравнении Inf и -Inf с NA_real_.

В частности:

NA_real_ <= Inf
#[1] NA
-Inf <= NA_real_
#[1] NA

Первое предложение документация для NA (help(NA)) равна

NA - логическая константа длины 1, которая содержит индикатор пропущенного значения.

Я предполагаю, что должны быть некоторые значения, которые не меньше или равны Inf, и некоторые значения, которые не больше или равны -Inf.Каковы эти ценности?Как вы представляете их в R?Пожалуйста, предоставьте полный список.

Я немного знаком с NaN, но разве они не возникают из вычислений, которые дают результаты, которые просто выходят за пределы диапазона подходящих значений, которые doubleможно хранить?Я точно не знаю, что такое Inf - Inf, но оно не может быть больше Inf.Что больше, чем Inf в стандарте IEEE, который должен реализовывать double?Этот стандарт просто определяет, что любая операция, включающая NaN, возвращает NaN?Тогда почему R не возвращает NaN?NA не является значением IEEE 754, не так ли?Может быть, я неправильно читаю документацию ?

1 Ответ

2 голосов
/ 30 марта 2019

Места, на которые вам нужно указать:

?Arithmetic
?Inf
?`>`

Первое указывает, что IEEE 754 обычно используется:

R зависит от служб ОС (а они от FPU) для арифметики с плавающей точкой. На всех текущих платформах R IEC 60559 (также известный как IEEE 754) используется арифметика, но некоторые вещи в этих стандартах являются необязательными. В частности, поддержка ненормальных чисел (которые выходят за пределы диапазона, указанного в .Machine) может отличаться для разных платформ и даже для расчетов на одной платформе.

А второй указывает, что арифметика с бесконечностью должна «работать»:

В R, как правило, все математические функции (включая базовую арифметику) должны работать должным образом с +/- Inf и NaN в качестве входа или выхода.

Однако третий указывает, что любое логическое сравнение с участием NA возвращает NA:

Пропущенные значения (NA) и значения NaN считаются несопоставимыми даже с самими собой, поэтому сравнения с ними всегда приводят к NA.

Таким образом, проблема не в том, что что-то «больше», чем Inf, а в том, что вместо R возвращается пропущенное значение при вызове сравнения с пропущенным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...