2011-04-23 25 views
43

He utilizado ?unzip en el pasado para obtener el contenido de un archivo comprimido usando R. Esta vez, estoy teniendo dificultades para extraer los archivos de un archivo .gz que se puede encontrar here.Descomprimir archivo gz usando R

He intentado ?gzfile y ?gzcon pero no he podido hacer que funcione. Cualquier ayuda que puede proporcionar será muy apreciada.

Respuesta

24

Si realmente desea descomprimir el archivo, sólo tiene que utilizar la función que realiza el apoyo untar gzip. ej .:

untar('chadwick-0.5.3.tar.gz') 
47

Aquí está un ejemplo práctico que puede ayudar a ilustrar lo que gzfile() y gzcon() son para

R> foo <- data.frame(a=LETTERS[1:3], b=rnorm(3)) 
R> foo 
    a  b 
1 A 0.586882 
2 B 0.218608 
3 C 1.290776 
R> write.table(foo, file="/tmp/foo.csv") 
R> system("gzip /tmp/foo.csv")    # being very explicit 

Ahora que el archivo se escribe, en lugar de uso implícito de file(), utilice gzfile():

R> read.table(gzfile("/tmp/foo.csv.gz")) 
    a  b 
1 A 0.586882 
2 B 0.218608 
3 C 1.290776 
R> 

El archivo que señala es un archivo tar comprimido, y hasta donde yo sé, R no tiene interfaz para los archivos tar. Estos se usan comúnmente para distribuir código fuente, como por ejemplo para paquetes R y fuentes R.

+3

es posible hacer esto con 'fread {}' data.table? Lo he intentado sin éxito hasta el momento –

+0

No lo creo. Verifique la documentación de 'fread'. –

+3

'fread (paste0 (" zcat <", PATH_TO_FILE))' –

17

http://blog.revolutionanalytics.com/2009/12/r-tip-save-time-and-space-by-compressing-data-files.html

R añade descompresión transparente para ciertos tipos de archivos comprimidos en la última versión (2.10). Si tiene sus archivos comprimidos con bzip2, xvz o gzip, pueden leerse en R como si fueran archivos de texto sin formato. Deberías tener las extensiones de nombre de archivo adecuadas.

El comando ...

myData <- read.table('myFile.gz') 

archivos #gzip comprimido tienen una "gz" extensión

funcionará como si 'myFile.gz' fueron el archivo de texto sin formato.

+0

Funciona a menos que especifique el argumento colClasses. Si agrega myData <- read.table ('myFile.gz', colClasses = c ("character", "integer")) entonces obtendrá un error (a partir de R 3.2.0). Mierda. – Met

26

Para anular un archivo gz en I se puede hacer

library(R.utils) 
gunzip("file.gz") 
+4

Eso es lo que estaba buscando. Tenga en cuenta: 'NOTA: el comportamiento predeterminado (eliminar = VERDADERO) es que el archivo de entrada se elimina después de que el archivo de salida se haya creado y cerrado completamente. - vea'? Gunzip' – Rentrop

+2

Whoa, eso parece incorrecto. – wordsforthewise

Cuestiones relacionadas