Почему, если ("T") не выдает ошибку, даже если "T" не является логическим вектором? - PullRequest
0 голосов
/ 26 сентября 2018

Я наткнулся на это, когда попытался выяснить, почему некоторые функции, которые я написал, дали неожиданный результат.

> if ("T") print("why?")
[1] "why?"

Почему это работает вместо выдачи ошибки argument is not interpretable as logical?Это то, что происходит с любой другой строкой, переданной в if, кроме "T", "F", "TRUE" и "FALSE".

Согласно странице справки if, условие внутри скобок должно быть логическим вектором, но

> is.logical("T")
[1] FALSE

Как это сочетается?Как if оценивает состояние, происходит ли что-то тайно, что преобразует Т в Т?

1 Ответ

0 голосов
/ 26 сентября 2018

Поскольку as.logical преобразует ограниченное количество строк в логические:

as.logical пытается привести свой аргумент к логическому типу.Для факторов используются уровни (метки).Как и as.vector, он удаляет атрибуты, включая имена.Символьные строки c («T», «TRUE», «True», «true») рассматриваются как «истина», c («F», «FALSE», «False», «false») как «false», а все остальные какNA.

В файле справки для if указано, что принуждение имеет место, но не как:

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

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