¿Existe alguna manera de combinar el uso de scan() y read.big.matrix() del paquete bigmemory para leer en un archivo .csv de 200 MB? archivo con columnas de tipo mixto para que el resultado sea un marco de datos con entero, carácter y columnas numéricas?Cómo cargar un archivo csv grande con columnas de tipo mixto usando el paquete bigmemory
Respuesta
De acuerdo con el archivo de ayuda, no.
Los archivos deben contener solo un tipo atómico (todo entero, por ejemplo). Usted, el usuario, debe saber si su archivo tiene nombres de fila y/o columna , y varias combinaciones de opciones deberían ser útiles en para obtener el comportamiento deseado.
No conozco este paquete/función, pero en R, las matrices solo pueden tener un tipo atómico (a diferencia de data.frames).
Gracias por sus dos centavos. En este blog, http://joshpaulson.wordpress.com/2010/12/20/michael-kane-on-bigmemory/ alguien sugirió que una solución a la limitación de matrices que tienen un solo tipo atómico (una característica heredada por grande. matriz) es usar scan(). Esperaba que alguien pudiera compartir sus experiencias con read.big.matrix del paquete bigmemory, especialmente con respecto a la lectura en columnas de tipo mixto y si han usado scan(). – Lourdes
Quizás pueda hacer eso en la etapa de procesamiento, pero me gustaría que se demuestre que está equivocado (sensu @Iterator). –
Pruebe el paquete ff para esto.
library(ff)
help(read.table.ffdf)
Función ‘read.table.ffdf’ lee los archivos planos separados en ‘ffdf’ objetos, muy parecido (y usar) ‘read.table’. También puede trabajar con con cualquier envoltorio de conveniencia como 'read.csv' y proporciona su propia envoltura de conveniencia (por ejemplo, 'read.csv.ffdf') para las envolturas habituales de de R.
Para 200Mb debería ser una tarea tan simple como esta.
x <- read.csv.ffdf(file=csvfile)
(Para los archivos mucho más grandes que probablemente se necesitará que investigue algunas de las opciones de configuración, dependiendo de su máquina y sistema operativo).
Gracias mdsummer. Probé el paquete ff, pude leer en el conjunto de datos de casi 300 MB que guardé en un objeto que luego coaccioné en un marco de datos con .data.frame. Sin embargo, esto consumió tanta memoria que quedaba poco para el análisis. Sin embargo, fue un buen comienzo y una sugerencia útil. – Lourdes
El punto entero no es cargarlo todo, sino usar las características mapeadas en memoria del paquete ff. Hay herramientas para extraer partes de las estructuras de datos ff – mdsumner
Ah, hay algunas cosas que son imposibles en esta vida, y hay algunas que son malentendidas y que conducen a situaciones desagradables. @Roman tiene razón: una matriz debe ser de un tipo atómico. No es un marco de datos.
Dado que una matriz debe ser de un tipo, intentar el snooker bigmemory
para manejar varios tipos es, en sí mismo, algo malo. ¿Podría hacerse? No voy a ir allí. ¿Por qué? Porque todo lo demás supondrá que está obteniendo una matriz, no un marco de datos. Eso llevará a más preguntas y más tristeza.
Ahora, lo que puede hacer es identificar los tipos de cada una de las columnas y generar un conjunto de archivos de bigmemory distintos, cada uno con los elementos que son de un tipo particular. P.ej. charBM = matriz grande de caracteres, intBM = matriz grande entera, y así sucesivamente. Entonces, es posible que pueda desarrollar una envoltura que produzca un marco de datos de todo esto. Sin embargo, no lo recomiendo: tratar los diferentes elementos como lo que son, o forzar la homogeneidad si se puede, en lugar de tratar de producir un grifo de gran marco de datos.
@mdsumner es correcto al sugerir ff
. Otra opción de almacenamiento es HDF5, a la que puede acceder a través del ncdf4
en R. Desafortunadamente, estos otros paquetes no son tan agradables como bigmemory
.
Gracias Iterator. Tienes razón, los otros paquetes no son tan agradables como bigmemory. – Lourdes
La mejor solución es leer el archivo línea por línea y analizarlo, de esta manera el proceso de lectura ocupará una cantidad de memoria casi lineal.
¡Bienvenido a StackOverflow! Sin embargo, esto no responde a la pregunta, que estaba específicamente dirigida al paquete bigmemory –
- 1. Importar archivo csv grande usando phpMyAdmin
- 2. Cargar múltiples símbolos usando csv con quantmod
- 3. cómo cortar columnas de csv
- 4. ¿Tiempo de espera al cargar un archivo grande?
- 5. Cómo leer un archivo CSV usando iOS
- 6. ¿Cómo creo un archivo CSV usando Perl?
- 7. Eliminando columnas en un CSV con python
- 8. ¿Cómo se JsDoc un tipo "mixto"?
- 9. Pitón sin memoria en un archivo CSV grande (numpy)
- 10. Cargar archivo CSV grande aproximadamente 10,000,000 registros en la tabla mysql también contiene filas duplicadas
- 11. Bash: ordenar el archivo csv por las primeras 4 columnas
- 12. ¿Cómo puedo cargar un archivo usando Catalyst?
- 13. Buscar número de columnas en el archivo csv
- 14. ¿Cómo cargar el archivo usando Mojolicious?
- 15. Descargar el archivo CSV usando "AJAX"
- 16. ERR_CONNECTION_RESET: la conexión se restableció al cargar un archivo grande
- 17. procesamiento de un archivo CSV con headen con gnu paralelo
- 18. Cómo filtrar desde archivo CSV usando Python Script
- 19. ¿Cómo usar el tipo CSV MIME?
- 20. ¿Cómo leo un archivo CSV grande con la clase Scala Stream?
- 21. cargar archivo con FTP usando nant
- 22. ¿Cómo puedo almacenar el resultado de una consulta SQL en un archivo CSV usando Squirrel?
- 23. django descarga el archivo csv usando un enlace
- 24. MySQL importar datos CSV - ignorar algunas columnas csv
- 25. Cómo codificar un hipervínculo en un archivo con formato CSV?
- 26. Procesando archivo de texto grande en C#
- 27. ¿Hay alguna manera de cargar un archivo muy grande usando django en nginx?
- 28. ¿Cómo lidiar con un archivo de texto muy grande?
- 29. Cree dinámicamente un archivo CSV con FileHelpers
- 30. Cargar y analizar el archivo csv con "nueva línea universal" en python en Google App Engine
¿tiene que ser el paquete bigmemory?Encuentro mucho más útil para este tipo de cosas – mdsumner
@mdsumner está en el camino correcto. ¿Incluso necesita ser respaldado por archivos? Por 200 MB, acabo de leerlo, trabajar con él y luego guardarlo como 1 o más archivos BM (o en 'ff', si lo desea). – Iterator