2012-09-17 6 views
44

que tiene un archivo zip muy grande y estoy tratando de leer en R sin descomprimirlo, así:R Lectura de un archivo de datos de cremallera sin descomprimirlo

temp <- tempfile("Sales", fileext=c("zip")) 
data <- read.table(unz(temp, "Sales.dat"), nrows=10, header=T, quote="\"", sep=",") 

Error in open.connection(file, "rt") : cannot open the connection 
In addition: Warning message: 
In open.connection(file, "rt") : 
    cannot open zip file 'C:\Users\xxx\AppData\Local\Temp\RtmpyAM9jH\Sales13041760345azip' 
+0

Este post puede ayudar a: http://stackoverflow.com/questions/3053833/using-r-to-download-zipped-data-file-extract-and-import-data – Sam

+0

Sí lo hice mi Debida diligencia y buscado antes de hacer esta pregunta, un poco diferente de esa pregunta es que estoy tratando de leer desde mi sistema de archivos local y no a través de una url. – laiboonh

+0

¿Alguna vez resolvió este problema? –

Respuesta

30

Si el archivo zip se llama Sales.zip y sólo contiene un archivo llamado Sales.dat, creo que se puede hacer simplemente lo siguiente (suponiendo que el archivo está en el directorio de trabajo):

data <- read.table(unz("Sales.zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",") 
+0

¿Hay alguna forma de encontrar los nombres de archivo dentro del archivo "Sales.zip" sin extraerlo? –

+0

@AllenWang sí, pero uno tiene que usar la función 'unzip' en su lugar:' descomprimir ("Sales.zip", list = TRUE) ' – plannapus

1

¿Qué versión de R está usando? Puede valer la pena probar la última versión estable (del proyecto, no de una distribución, que puede estar detrás).

He visto este error en versiones anteriores pero no en la última, al ejecutar comandos idénticos usando unz en ambos.

7

No hay necesidad de utilizar unz, como ahora read.table puede manejar directamente el archivo comprimido:

data <- read.table("Sales.zip", nrows=10, header=T, quote="\"", sep=",") 

Ver this post

0

Si ha zcat instalado en su sistema (que es el caso de Linux , MacOS y cygwin) también se puede utilizar:

zipfile<-"test.zip" 
myData <- read.delim(pipe(paste("zcat", zipfile))) 

Esta solución también tiene la ventaja de que no se crean archivos temporales.

2

Los métodos del paquete readr también admiten archivos comprimidos si el sufijo del archivo indica la naturaleza del archivo, es decir, los archivos que terminan en .gz, .bz2, .xz o .zip se descomprimirán automáticamente.

require(readr) 
myData <- read_csv("foo.txt.gz") 
Cuestiones relacionadas