Quiero reemplazar caracteres no ASCII (por ahora, solo español), por su equivalente ASCII. Si tengo "á", quiero reemplazarlo por "a" y así sucesivamente.Reemplazar caracteres no ASCII con una lista de cadenas definida sin un bucle en R
Construí esta función (funciona bien), pero no quiero usar un bucle (incluyendo bucles internos como sapply).
latin2ascii<-function(x) {
if(!is.character(x)) stop ("input must be a character object")
require(stringr)
mapL<-c("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","ü","Ü")
mapA<-c("a","e","i","o","u","A","E","I","O","U","n","N","u","U")
for(y in 1:length(mapL)) {
x<-str_replace_all(x,mapL[y],mapA[y])
}
x
}
¿Hay una forma elegante de resolverlo? Cualquier ayuda, sugerencia o modificación se aprecia
Gracias! funciona perfectamente. Solo una pregunta (solo para saber); ¿sabes si la función gsubfn utiliza algún tipo de bucle interno? ¿Debería ser más rápido que sapply? –
@ Álvaro - No creo que 'gsubfn()' sea particularmente rápido, 'simplemente' conveniente y elegante. –
También vea 'chartr' en la base de R que parece estar bien para el problema tal como se indicó, aunque si hay variaciones en el problema real como reemplazar dos secuencias de caracteres,' gsubfn' podría manejarlo pero no 'chartr'. –