Почему оператор if в R вычисляется без логического условия?

#r

#r

Вопрос:

Я заметил, что если я передаю любое число, кроме 0, в качестве аргумента в an if statement , код внутри if statement компилируется. Я не понимаю, почему это происходит! Я понимаю, что R внутренне распознает 0 как FALSE, а оператор внутри if condition не вычисляется, что имеет смысл, но почему он вычисляется для других чисел?

 if(5) {
5 * 5
}
 

Я ожидал, что получу сообщение об ошибке, но код компилируется, и я получаю 25 в качестве ответа.

Ответ №1:

На странице if справки if ожидает:

Длина-один логический вектор … Другие типы по возможности принудительно преобразуются в логические, игнорируя любой класс

Так что в основном это так

 as.logical(5)
# [1] TRUE
 

и поскольку это ТАК 5 != 0 , это ПРАВДА

 as.logical(0)
# [1] FALSE
 

в языках довольно часто любое число, отличное от 0, интерпретируется как «true»

Комментарии:

1. Теперь это имеет смысл! Но знаете ли вы, почему интерпретация чисел рядом с 0 как «true» является случаем для многих языков, как вы указали? Мне просто любопытно!

2. @Ashirwad Похоже, что этот вопрос был задан здесь: softwareengineering.stackexchange.com/questions/198284 /…

3. Похоже, что по этому поводу было проведено тщательное обсуждение. Спасибо` что указали мне на этот ресурс!