Почему выражения isTRUE (3) и isTRUE (NA) оцениваются как ложные в R? - PullRequest
0 голосов
/ 10 мая 2018

Поскольку все значения, отличные от 0, принимаются за истину в R, isTRUE (3) должна логически принимать значение True, но это не так.Почему так?Кроме того, я хотел бы знать причину, по которой isTRUE (NA) оценивается как ложное.

Ответы [ 2 ]

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

Прямо из документации (попробуйте ?isTRUE)

isTRUE (x) - это сокращение от тождественного (TRUE, x), и поэтому оно истинно в том и только в том случае, если x является логическим вектором длины один, единственным элементом которого является TRUE и у которого нет атрибутов (даже имена).

Это не просто проверка значения, это проверка, чтобы убедиться, что это логическое значение.

Я знаю, что в информатике часто 0 - это ложь, а все, что отлично от нуля, - правда, но R подходит к вещам с точки зрения статистики, а не с точки зрения информатики, так что это определение немного строже.

Сказав это, вы заметите это, если утверждение оценивает так, как вы представляете

if(3){print("yay")}else{print("boo")}

Это просто способ, которым R проводит оценку. Функция isTRUE более конкретна.

Также обратите внимание на это поведение

FALSE == 0 верно TRUE == 1 верно TRUE == 3 ложно

Таким образом, R будет обрабатывать 0 и 1 как ложные и истинные соответственно при выполнении такого рода оценок.

Я не уверен, какой была ваша запланированная реализация (если таковая была), но, вероятно, лучше попытаться быть точным в отношении булевой логики в R или предварительно проверить все.

Что касается АН, то более странное поведение.

TRUE & NA соответствует NA TRUE | NA соответствует TRUE

В этих случаях R приводит NA к логическому типу, так как что-либо или с TRUE является ИСТИНОЙ, оно может приравнять это. Но значение будет меняться в зависимости от второго члена в операции and, поэтому возвращает NA.

Что касается вашего конкретного случая, снова isTRUE(NA) приравнивается к ложному, потому что NA не является логическим вектором длины один, единственным элементом которого является ИСТИНА.

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

Поскольку эта функция обходит правила автоматического преобразования R и проверяет, что x равно буквально ИСТИНА или ЛОЖЬ.

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