not how equal r boolean-logic

how - ¿Por qué VERDADERO== "VERDADERO" es VERDADERO en R?



operations in r (3)

  1. ¿Por qué TRUE == "TRUE" es TRUE en R?
  2. ¿Hay algún equivalente para === en R?

Actualizar:

Todos estos regresan FALSE :

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

El único valor TRUE es TRUE == "TRUE" .

En caso de verificar con identical() todo funciona bien.

Segunda actualización:

Por === operador me refiero al proceso de verificar el valor y el tipo de datos de una variable . En este caso, asumí que el operador == solo comparará los valores de las variables, no su tipo de datos también.


Además de

VERDADERO == "VERDADERO"

estos también son verdaderos:

  • VERDADERO == 1
  • VERDADERO == 1.0
  • VERDADERO == 1.0000000000000001
  • TRUE == 0.99999999999999999 etc., en general también todos los valores lo suficientemente cerca de 1.0 para ser redondeados por IEEE754.

Pero lo que es más interesante es que if() comprueba: verifica que non-false ; de hecho, estas tramas !:

if(4.0) plot(1)

Creo que los únicos valores que no activan if() son 0, F, FALSO y "FALSO", parecen definidos exactamente como 0.


De acuerdo con el archivo de ayuda ?`==` :

Si los dos argumentos son vectores atómicos de diferentes tipos, uno es forzado al tipo del otro, el orden de precedencia (decreciente) es carácter, complejo, numérico, entero, lógico y crudo.

Tan TRUE es coaccionado a "TRUE" (es decir, como as.character(TRUE) ), de ahí la igualdad.

El equivalente del operador === (es decir, son los dos objetos iguales y del mismo tipo) sería identical función:

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


VERDADERO y FALSO son palabras reservadas en R. No creo que eznme fuera correcto (antes de su edición) cuando dijo que cualquier valor distinto de cero era VERDADERO, ya que TRUE == "A" evalúa como FALSO. (Eso hubiera sido correcto al explicar por qué TRUE == 1 evalúa como TRUE, pero no explicaría el resultado para TRUE == 7

La explicación dada por plannapus fue sacada del contexto de describir el comportamiento de as.logical . Está más cerca de la "verdad", porque es la coerción implícita de VERDADERO al carácter por el operador == que crea este resultado. Aunque T y F reciben inicialmente los valores de TRUE y FALSE, pueden reasignarse a otros valores o tipos.

> 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

(Anteriormente, escribí incorrectamente que la coerción inducida por TRUE == "TRUE" era lógica, en realidad es a través de as.character (TRUE) que devuelve "TRUE").