Почему TRUE == "TRUE" имеет значение TRUE в R? - программирование
Подтвердить что ты не робот

Почему TRUE == "TRUE" имеет значение TRUE в R?

  • Почему TRUE == "TRUE" есть TRUE в R?
  • Есть ли эквивалент для === в R?

Update:

Все они возвращаются FALSE:

TRUE == "True"
TRUE == "true"
TRUE == "T"

Единственное значение TRUE - TRUE == "TRUE".

В случае проверки с помощью identical() все работает нормально.

Второе обновление:

Оператором === я имел в виду процесс проверки значения и типа данных переменной. В этом случае я предположил, что оператор == будет сравнивать только значения переменных, а не их Тип данных.

4b9b3361

Ответ 1

В соответствии с файлом справки ?`==`:

Если два аргумента являются атомарными векторами разных типов, один принуждается к типу другого, (убывающий) порядок приоритета является символом, сложным, числовым, целым, логическим и необработанным.

So TRUE принуждается к "TRUE" (i. e. as.character(TRUE)), следовательно, равенство.

Эквивалент оператора === (то есть два объекта равны и одного типа) будет функцией identical:

identical(TRUE, "TRUE")
[1] FALSE

Ответ 2

TRUE и FALSE являются зарезервированными словами в R. Я не думаю, что eznme был прав (до его редактирования), когда он сказал, что любое ненулевое значение было TRUE, поскольку TRUE == "A" оценивается как FALSE. (Это было бы правильно объяснить, почему TRUE == 1 оценивает значение TRUE, но не объясняет результат для TRUE == 7

Объяснение, данное plannapus, было выведено из контекста описания поведения as.logical. Он ближе к "истине", потому что это неявное принуждение TRUE к символу с помощью оператора ==, который создает этот результат. Хотя T и F изначально заданы значения TRUE и FALSE, их можно переназначить другими значениями или типами.

> TRUE == as.logical( c("TRUE", "T", "true", "True") )
[1] TRUE TRUE TRUE TRUE

>  TRUE == 7
[1] FALSE
> TRUE == as.logical(7)
[1] TRUE
>  TRUE == as.logical("A")
[1] NA

(ранее я неправильно писал, что принуждение, индуцированное TRUE == "TRUE", было логичным: на самом деле через as.character(TRUE) возвращается "TRUE".)

Ответ 3

В дополнение к

ИСТИНА == "ИСТИНА"

это также верно:

  • ИСТИНА == 1
  • TRUE == 1.0
  • ИСТИНА == 1.0000000000000001
  • ИСТИНА == +0,99999999999999999 и т.д., в целом также все значения, близкие к 1.0, должны быть округлены до IEEE754.

Но более интересным является проверка if(): он проверяет non-false; на самом деле эти сюжеты!:

if(4.0) plot(1) 

Я думаю, что единственные значения, которые не запускают if(), равны 0, F, FALSE и FALSE, они кажутся точно равными 0.