2011-12-02 11 views
21

Tengo dificultades con la distinción entre mayúsculas y minúsculas. ¿Podemos apagarlo?desactivando la sensibilidad de la caja en r

A1 <- c("a", "A", "a", "a", "A", "A", "a") 
B1 <- c(rep("a", length(A1))) 

A1 == B1 
# [1] TRUE FALSE TRUE TRUE FALSE FALSE TRUE 

debe ser todo TRUE

Respuesta

29

No hay manera de apagar la sensibilidad caso de ==, pero coaccionar a los dos vectores de caracteres en mayúsculas y continuación pruebas para la igualdad equivale a lo mismo:

toupper(A1) 
[1] "A" "A" "A" "A" "A" "A" "A" 

toupper(A1)==toupper(B1) 
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
21

Como dijo Josh O'Brien. Para ampliar un poco en juego sin vaina en R, que en realidad es posible con expresiones regulares (por ejemplo, utilizando grep y grepl)

En este caso se puede utilizar mapply y grepl como este, siempre y cuando estés a juego caracteres individuales:

A1 <- c("a", "A", "a", "a", "A", "A", "a") 
B1 <- c(rep("a", length(A1))) 

mapply(grepl,A1,B1,ignore.case=TRUE) 
# a A a a A A a 
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

Tienes que tener cuidado sin embargo, debido a que también coincide con cadenas parciales de esta manera:

C1 <- rep('ab',length(A1)) 
mapply(grepl,A1,C1,ignore.case=TRUE) 
# a A a a A A a 
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

esto puede o no puede ser lo que quiera.

En una nota, si coinciden con las expresiones regulares y desea ignorar el caso, también se puede utilizar el constructo (?i) para activar el juego sin vaina y (?-i) para apagar sin vaina juego:

D1 <- c('abc','aBc','Abc','ABc','aBC') 

grepl('a(?i)bc',D1) # caseless matching on B and C 
# [1] TRUE TRUE FALSE FALSE TRUE 

grepl('a(?i)b(?-i)c',D1) # caseless matching only on B 
# [1] TRUE TRUE FALSE FALSE FALSE 
+1

+1 Esa es una adición divertida e informativa. Si quiere usar 'grepl' y _not_ accept substring matches, supongo que podría hacer' mapply (grepl, A1, C1, ignore.case = TRUE) & mapply (grepl, C1, A1, ignore.case = TRUE) ' . –

+0

@ JoshO'Brien: De hecho, podrías, pero es poco probable que esa construcción sobresalga en eficiencia ... ;-) –

+0

Sí. Y en lo que sea opuesto al código de golf, ¡es un contendiente! –

Cuestiones relacionadas