how - ¿Por qué VERDADERO== "VERDADERO" es VERDADERO en R?
operations in r (3)
- ¿Por qué
TRUE == "TRUE"esTRUEen R? - ¿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").