[R-es] A vueltas con los UTF-8 en RStudio

Pedro Concejero Cerezo pedro.concejerocerezo en telefonica.com
Lun Abr 13 13:12:05 CEST 2015


(Mensaje sin acentos porque solo el dios de los juegos de caracteres sabe por que leches mi cliente de correo no manda bien mis mensajes a la lista)
Hola, muchisimas gracias a todos por las sugerencias.
Por si alguien tiene tambien ese problema, resumo y planteo las soluciones.
El problema es que un objeto R salvado con save en un sistema (p. ej. unix) al leerlo en otro sistema (windows) mantiene la codificacion del primero (utf8) y si lo usas tal cual en el segundo no te saldran los caracteres especiales (para español los acentos y depende de tus datos puede ser que muchos mas).
Las alternativas planteadas y que me han funcionado son:
- una funcion bastada en iconv -ver abajo, que cambia la codificacion de los factores y cadenas que se encuentre en el data frame (sugerida por Jorge Ayuso y Javier Marcuzzi, es la misma solucion)
- escribir a disco con write.table para luego leer con read.table y opcion fileEncoding

He hecho una pequeña prueba y la primera solucion funciona perfectamente y tarda casi la mitad que la segunda, para un dataset pequeño, de 11000 x 28. Además de que la segunda opcion tiene mas probabilidad de equivocarte con alguna opcion (como me ha pasado a mi, que he tenido que repetirlo varias veces).

He dejado el codigo en
https://github.com/pedroconcejero/taller-color/blob/master/alternativas_cambio_codif_caracteres.r

por si quereis probar con algun data frame vuestro.

Saludos!
Pedro


El 10/04/2015 a las 9:43, Jorge Ayuso Rejas escribió:
Hola Pedro, yo también me peleo día a día con Windows y Linux...

Una cosa es que en RStudio pongas la codificación en UTF8 esto es para los scripts/código y otra cosa son la codificación de los datos guardados en el rda.

Cuando haces un save guardas los datos con la codificación del sistema y cuando haces load igual...

Yo la única solución que he encontrado ha sido re-codificar en mi caso data.frame, por ejemplo:

iconv.data.frame<-function (df, ...)  # Esta función la encontré por ahí
{
    df.names <- iconv(names(df), ...)
    df.rownames <- iconv(rownames(df), ...)
    names(df) <- df.names
    rownames(df) <- df.rownames
    df.list <- lapply(df, function(x) {
        if (class(x) == "factor") {
            x <- factor(iconv(as.character(x), ...))
        }
        else if (class(x) == "character") {
            x <- iconv(x, ...)
        }
        else {
            x
        }
    })
    df.new <- do.call("data.frame", df.list)
    return(df.new)
}

iconv.data.frame(datos,from="UTF8",to="latin1")

por ejemplo...

¡Suerte!


El 9 de abril de 2015, 15:32, Pedro Concejero Cerezo <pedro.concejerocerezo en telefonica.com<mailto:pedro.concejerocerezo en telefonica.com>> escribió:
Hola, otra vez a vueltas con los UTF8, seguro que es un tema sempiterno de esta lista y que ya se ha contestado, regannadme por ello (y por escribir sin acentos).
Genero un .rda en unix con el system default UTF8 y me lo traigo a un windows.
Tengo el Rstudio en windows configurado con Global Options > Default text encoding UTF8.
Cargo el .rda con load y nada, los acentos a la porra. Vamos, que pasa de mi y de mi configuracion.
¿Hay alguna forma de forzar a load a cargar con text encoding UTF8?
He probado esto y mirad lo que me dice:
> Sys.setlocale(category="LC_ALL", locale = "Spanish_Spain.UTF-8")
[1] ""
Warning message:
In Sys.setlocale(category = "LC_ALL", locale = "Spanish_Spain.UTF-8") :
  OS reports request to set locale to "Spanish_Spain.UTF-8" cannot be honored
>

Y ahora que estoy lanzado, ¿como cambio el juego de caracteres por defecto en consola, no en RStudio?

Mis versiones de RStudio:
Version 0.98.953 en windows
Version 0.98.1074 (server) en unix (centos creo que es el SO)

Saludos!

--
Pedro Concejero
E-mail: pedro.concejerocerezo en telefonica.com<mailto:pedro.concejerocerezo en telefonica.com><mailto:pedro.concejerocerezo en telefonica.com<mailto:pedro.concejerocerezo en telefonica.com>>
skype: pedro.concejero
twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro>
linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es>
Entusiasta R, me encontrareis aqui gRupo R madRid <http://madrid.r-es.org/>

________________________________

Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario, puede contener información privilegiada o confidencial y es para uso exclusivo de la persona o entidad de destino. Si no es usted. el destinatario indicado, queda notificado de que la lectura, utilización, divulgación y/o copia sin autorización puede estar prohibida en virtud de la legislación vigente. Si ha recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente por esta misma vía y proceda a su destrucción.

The information contained in this transmission is privileged and confidential information intended only for the use of the individual or entity named above. If the reader of this message is not the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited. If you have received this transmission in error, do not read it. Please immediately reply to the sender that you have received this communication in error and then delete it.

Esta mensagem e seus anexos se dirigem exclusivamente ao seu destinatário, pode conter informação privilegiada ou confidencial e é para uso exclusivo da pessoa ou entidade de destino. Se não é vossa senhoria o destinatário indicado, fica notificado de que a leitura, utilização, divulgação e/ou cópia sem autorização pode estar proibida em virtude da legislação vigente. Se recebeu esta mensagem por erro, rogamos-lhe que nos o comunique imediatamente por esta mesma via e proceda a sua destruição

        [[alternative HTML version deleted]]


_______________________________________________
R-help-es mailing list
R-help-es en r-project.org<mailto:R-help-es en r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-help-es




--
Jorge Ayuso Rejas


--
Pedro Concejero
BI & Big Data - Internal Exploitation - Telefónica I+D<http://www.tid.es>
E-mail: pedro.concejerocerezo en telefonica.com<mailto:pedro.concejerocerezo en telefonica.com>
skype: pedro.concejero
twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro>
linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es>
Entusiasta R, me encontraréis aquí gRupo R madRid <http://madrid.r-es.org/>

________________________________

Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario, puede contener información privilegiada o confidencial y es para uso exclusivo de la persona o entidad de destino. Si no es usted. el destinatario indicado, queda notificado de que la lectura, utilización, divulgación y/o copia sin autorización puede estar prohibida en virtud de la legislación vigente. Si ha recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente por esta misma vía y proceda a su destrucción.

The information contained in this transmission is privileged and confidential information intended only for the use of the individual or entity named above. If the reader of this message is not the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited. If you have received this transmission in error, do not read it. Please immediately reply to the sender that you have received this communication in error and then delete it.

Esta mensagem e seus anexos se dirigem exclusivamente ao seu destinatário, pode conter informação privilegiada ou confidencial e é para uso exclusivo da pessoa ou entidade de destino. Se não é vossa senhoria o destinatário indicado, fica notificado de que a leitura, utilização, divulgação e/ou cópia sem autorização pode estar proibida em virtude da legislação vigente. Se recebeu esta mensagem por erro, rogamos-lhe que nos o comunique imediatamente por esta mesma via e proceda a sua destruição

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es