2016-06-09 1 views
1

Je suis sur une machine Windows essayant d'accélérer l'étape read.table. Mes fichiers sont tous. Gz.Comment utiliser fread pour lire des fichiers gz dans R?

x=paste("gzip -c ",filename,sep="") 
phi_raw = fread(x) 

Error in fread(x) : 

Impossible de comprendre l'erreur. C'est un peu trop cryptique pour moi.

Pas un doublon comme suggéré par zx8754: en utilisant spécifiquement dans le contexte de fread. Et même si fread dows n'a pas de support natif pour gzip, ce paradigme devrait fonctionner. Voir http://www.molpopgen.org/coding/datatable.html

Mise à jour

Par suggestion ci-dessous à l'aide d'un système donne plus message d'erreur - si je suis toujours bloqué.

Error in fread(system(x)) : 

    'input' must be a single character string containing a file name, a command, full path to a file, a URL starting 'http[s]://', 'ftp[s]://' or 'file://', or the input data itself 

In addition: Warning message: 


running command 'gzip -c D:/x_.gz' had status 1 

Mise à jour

Courir avec gunzip comme indiqué ci-dessous:

Error in fread(system(x)) : 

    'input' must be a single character string containing a file name, a command, full path to a file, a URL starting 'http[s]://', 'ftp[s]://' or 'file://', or the input data itself 

In addition: Warning message: 

running command 'gunzip -c D:/XX_.gz' had status 127 

note les différents statuts

+0

https://github.com/Rdatatable/data.table/issues/717 – zx8754

+0

Copie possible de [fichier gz Decompress en utilisant R] (http://stackoverflow.com/questions/5764499/decompress-gz-file- using-r) – zx8754

+0

Pas un doublon: utiliser spécifiquement dans le contexte de fread. Et même si fread dows n'a pas de support natif pour gzip, ce paradigme devrait fonctionner. – pythOnometrist

Répondre

3

J'utilise souvent gzip avec fread sous Windows. Il lit dans les fichiers sans les décompresser. J'essaierais d'ajouter l'option -d avec la commande gzip. Plus précisément, dans votre code, essayez x=paste("gzip -dc ",filename,sep=""). Voici un exemple reproductible qui fonctionne sur ma machine:

df <- data.frame(x = 1:10, y = letters[1:10]) 
write.table(df, 'df.txt', row.names = F, quote = F, sep = '\t') 
system("which gzip") 
system("gzip df.txt") 
data.table::fread("gzip -dc df.txt") 

Et voici mon sessionInfo().

R version 3.3.1 (2016-06-21) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] rsconnect_0.4.3 tools_3.3.1  data.table_1.9.6 chron_2.3-47 

Je l'ai utilisé avec succès gzip sous Windows sans ajouter un fichier décompressé sur mon disque dur utilisant à la fois RTools (https://cran.r-project.org/bin/windows/Rtools/) et Gow (https://github.com/bmatzelle/gow/wiki). Si mon exemple reproductible ci-dessus ne fonctionne pas pour vous, utilisez les commandes which gzip et which gunzip pour voir le .exe exact qui s'exécute. Si ce n'est pas Rtools ou Gow, essayez peut-être d'installer l'un de ces deux et essayez à nouveau l'exemple reproductible.