Прямо из документации (попробуйте ?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 не является логическим вектором длины один, единственным элементом которого является ИСТИНА.