如何在R中使用fread读取gz文件?

12

我正在使用 Windows 电脑尝试加快 read.table 步骤。我的文件都是 .gz 格式。

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

Error in fread(x) : 

对于我来说,这个错误有点过于难懂了。

与zx8754所建议的不同:在特定的fread上下文中使用。虽然fread没有原生支持gzip,但这种模式应该是可行的。请参见http://www.molpopgen.org/coding/datatable.html

更新

根据下面的建议,使用system会产生更长的错误消息-但我仍然被卡住了。

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

更新

如下所指出,使用gunzip运行:

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

请注意不同的状态


https://github.com/Rdatatable/data.table/issues/717 - zx8754
1
不是重复:在fread的特定上下文中使用。虽然fread没有原生支持gzip,但这种范例应该可以工作。 - pythOnometrist
错误信息在哪里?fread(system(x)) 怎么样? - zx8754
谢谢 - 至少有助于产生完整的错误。请参见上面的编辑。 - pythOnometrist
你们都在使用Windows吗?当我尝试使用fread(file= "gzip -cd input.gz")时,出现了以下错误提示:“提供的文件'gzip -cd input.gz'不存在。” - Ricardo Guerreiro
显示剩余4条评论
2个回答

9

data.table现在支持使用fread函数直接读取.gz文件,前提是已安装R.utils包。

此答案所建议的对于类似问题,您可以简单地运行以下命令:

library(data.table)
phi_raw <- fread("filename.gz")

6

我经常在Windows上使用gzip和fread。它可以读取文件而不解压缩文件。你可以尝试在gzip命令中添加-d选项。具体来说,在你的代码中,可以尝试使用x=paste("gzip -dc ",filename,sep="")。以下是一个可以在我的机器上运行的可重复示例:

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")

以下是我的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 

我已成功地在Windows上使用gzip,而无需将解压缩的文件添加到硬盘中,使用了Rtools (https://cran.r-project.org/bin/windows/Rtools/)和Gow (https://github.com/bmatzelle/gow/wiki)。如果以上可重现的示例无法正常运行,请使用which gzipwhich gunzip命令查看正在运行的确切.exe文件。如果不是Rtools或Gow,则可以尝试安装其中之一,并再次尝试可重现的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接