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