[Pxr-commits] cambios en read.px --- cleanDat
Carlos J. Gil Bellosta
cgb at datanalytics.com
Wed Aug 24 15:04:52 CEST 2011
Hola, ¿qué tal?
Es cierto que cleanDat es subóptima. Hace varias pasadas por encima de
la cadena. Incluso estoy seguro de que alguna de ellas es innecesaria.
Pero permite hacer algunas cosas que no sé si scan puede. Por ejemplo,
NA puede codificarse de varias maneras: no sólo como "." sino también
como ".." y otras. ¿Funcionaría scan en estos casos?
Estuve trabajando un poco en maneras de leer partes DATA cuando vienen
especificadas las KEYS (una especie de formato "sparse"). En tal caso,
scan dejaría de funcionar pero cleanDat podría modificarse para
aceptar ese tipo de datos. (Aunque tengo tamibén dudas de si el
formato "sparse" se usa realmente: ni Francisco ni yo creemos haberlo
visto por ninguna parte fuera de las especificaciones del formato).
Existiría una alternativa híbrida más eficiente que la actual que es
cambiar cleanDat para que:
1) en una pasada sustituyese los caracteres equivalentes a NA por "NA"
usando expresiones regulares (en lugar de una sucesión de
sustituciones)
2) usar textConnection + scan para leer los datos finalmente.
Habría 2 pasadas por la cadena en lugar de la una actual, pero podría
resolverse el problema de los diversos tipos de NA. Pero habría muchas
menos pasadas por la cadena que en la versión original (en la que,
todo ha de decirse, no se tuvieron en cuenta cuestiones de eficiencia
porque el problema tampoco se había planteado).
Un saludo,
Carlos J. Gil Bellosta
http://www.datanalytics.com
El día 24 de agosto de 2011 04:11, Oscar Perpiñan Lamigueiro
<oscar.perpinan at upm.es> escribió:
> Hola,
>
> Sin embargo, la lectura del fichero tarda unos 10 segundos
> (con el fichero ya descargado en local). Revisando con
> RProf he comprobado que la mayor carga se la llevan las funciones
> break.clean y cleanDat tirando de strsplit. Se me ha ocurrido una forma
> alternativa de extraer los valores numéricos de DATA$value: en lugar de
> usar la combinación de strsplit y gsub que tenemos en cleanDat, uso una
> combinación de textConnection con scan. Ahora tarda algo menos de 2
> segundos en leer el fichero. Hay que especificar el "dot code" que se
> usa como "missing". Veo que en el INE usan "." (por ejemplo,
> http://www.ine.es/inebase/fic/px/l0/EPA_es_25.px), así que he añadido un
> argumento adicional en read.px y le he asignado ese valor por defecto.
>
> Por último, he añadido "encod.from='UTF-8'" en el ejemplo de read.px
> para que los caracteres salgan bien.
>
> Después de pasar el R CMD check, usar los ejemplos y descargar varios
> ficheros de internet, todo va bien. Pero, por favor, probadlo vosotros.
More information about the Pxr-commits
mailing list