В R почему all (numeric (0)) дает TRUE, а any (numeric (0)) - FALSE? - PullRequest
0 голосов
/ 24 мая 2018

Я пытался сгенерировать последовательность индексов, где последовательные 1 появляются в векторе, и я наткнулся на этот специфический случай.Почему это странно, потому что я не понимаю, когда all() дает ИСТИНА, это означает, что каждое значение ИСТИНА, поэтому any() также должно давать ИСТИНА, что здесь не так.

all(numeric(0))
# [1] TRUE
any(numeric(0))
# [1] FALSE

Большинство вопросов, которые я нашел, касаются сравнения чисел (0) с числом и как избежать генерации чисел (0)

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

Подобное явление происходит с min и max:

> min(numeric(0))
[1] Inf
#but
> max(numeric(0))
[1] -Inf

Эти два вычисления вызывают предупреждения, но не ошибки.Важный вопрос заключается в том, почему они возвращают значения, которые они возвращают.Чтобы ответить на это, обратите внимание, что другое имя для минимума конечного множества - это наибольшая нижняя граница .Все является нижней границей для пустого множества, поэтому никакое конечное число не является наибольшей нижней границей, поэтому оно определено как бесконечность.Двойственное рассуждение применимо к максимуму, поскольку это наименьшая верхняя граница .

В смысле теория решетки , единственное разумное определение для объединения (наименьшее верхнееграница) пустого множества должна быть нижним элементом решетки, а встреча (наибольшая нижняя граница) - вершиной решетки.В случае расширенных действительных чисел этими верхним и нижним элементами являются Inf и -Inf.

Отношения между этим и any и all довольно просты: all по существу min применяется к истинным значениям.Это оператор встречи, который при применении к пустому набору должен дать вам вершину решетки, которая составляет TRUE в решетке значений истинности.Точно так же any в основном max применяется к истинным значениям.Это оператор соединения, который при применении к пустому набору должен давать нижний элемент решетки, который равен FALSE.

0 голосов
/ 24 мая 2018

Поскольку за мой комментарий в качестве ответа есть пара голосов, я опубликую его здесь.

В документации ?all указано, что (просто показаны соответствующие части):

Возвращаемое значение - ИСТИНА [...] (в том числе, если значений нет)

И для ?any, опять же только соответствующие части:

Возвращаемым значением является [...] FALSE [...] (в том числе, если значений нет)

Функции определены таким образом, что другие операции работают так, как ожидается.В частности, как указывает @bmrn: all(all(x), all(y)) == all(x, y).

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