Вы задаете два отдельных вопроса.
Во-первых, один в вашем заголовке спрашивает, почему 1 - это единственное число, которое проверяет значение, равное TRUE
. Для сравнения x == TRUE
необходимо, чтобы x
и TRUE
были одного типа. Обычно логика типа TRUE
будет преобразована в тот же тип, что и x
. (Единственное исключение - если x
имеет тип «raw», который используется редко. Он будет преобразован в логический.)
Если x
- это число, то оно остается как есть, и TRUE
преобразуется в число 1. Таким образом, сравнение становится x == 1
, и это верно только тогда, когда x
равно 1. Если x
было символьным значением, TRUE
станет "TRUE"
, и это только равное значение.
Ваш второй вопрос о том, что происходит, когда в if(condition)
используется нелогичный condition
. В этом случае condition
преобразуется в логическое значение. Для чисел существует три возможности: 0 становится FALSE
, NA
или NaN
выдает ошибку, а любое другое число становится TRUE
. Для символов несколько различных значений ("FALSE"
, "F"
, "false"
и "False"
) дают FALSE
, а некоторые дают TRUE
, но большинство выдает ошибку.