Ответ 1
Я предполагаю, что это наследуется от C, например. от здесь:
В C true представлено любое числовое значение, не равное 0, а false представлено 0
Также см., например, здесь; на данный момент я не могу найти лучшего источника для официальной спецификации языка.
Пиратская копия Kernighan и Ritchie 2d ed. Я нашел онлайн (я бы предпочел не ссылаться на него). 50, раздел 3.2, "If-Else" (выделено мной):
Выражение оценивается; если это правда (, то есть если выражение имеет ненулевое значение), выполняется оператор 1. Если оно ложно (выражение равно нулю), а если есть часть else, вместо этого выполняется оператор 2.
@hrbrmstr указывает, что внутреннее определение R LOGTIC, используемое для преобразования, находится в Rinternals.h:
#define LOGICAL(x) ((int *) DATAPTR(x))