Resultado inesperado al comparar cadenas con `==`
Tengo dos vectores:
a = strsplit("po","")[[1]]
[1] "p" "o"
b = strsplit("polo","")[[1]]
[1] "p" "o" "l" "o"
<code>
Estoy intentando compararlos usando `==`.
Desafortunadamente, `a==b` devuelve un resultado inesperado.
</code>r
a==b
[1] TRUE TRUE FALSE TRUE
<code>
Mientras espero tener:
</code>r
[1] TRUE TRUE FALSE FALSE
Entonces, ¿qué está causando esto y cómo se puede lograr el resultado esperado?
El problema parece estar relacionado con el hecho de que el último elemento de ambos vectores es el mismo. Cambiar b
por ejemplo a polf
sí da el resultado esperado, y también porque al establecer b
como pooo
da TRUE TRUE FALSE TRUE
y no TRUE TRUE TRUE TRUE
.
Editar
En otras palabras, esperaría que los elementos faltantes (cuando las longitudes difieren) se pasen como nada (solo ""
parece dar TRUE TRUE FALSE FALSE
, NA
y NULL
dan resultados diferentes).
r
c("p","o","","")==c("p","o","l","o")
[1] TRUE TRUE FALSE FALSE
davy.ai
El problema es que el operador
==
compara elemento por elemento y recicla el vector más corto. Esto significa que el tercer elemento dea
se compara con el tercer elemento deb
, y dado que el tercer elemento deb
esl
y el tercer elemento dea
es una cadena vacía, el resultado esFALSE
, y lo mismo ocurre con el cuarto elemento. Sin embargo, la reciclación entra en juego y compara la cadena vacía ena
con el último elemento enb
, que también es uno
, resultando enTRUE
.Para obtener el resultado esperado, podemos agregar cadenas vacías al vector más corto, o podemos probar la igualdad de los vectores ordenados de la siguiente manera:
Ambos métodos resultan en la salida esperada, donde los tercer y cuarto elementos son
FALSE
.