【问题标题】:fread() of file from archive归档文件的 fread()
【发布时间】:2015-10-26 08:02:01
【问题描述】:

我想知道从存档文件(在我的情况下为 zip 存档)读取 data.table 的推荐方法是什么。一个明显的选择是将其解压缩到一个临时文件,然后像往常一样fread() 它。我不想费心创建新文件,所以我使用来自unz() 连接的read.table(),然后使用data.table() 进行转换:

mydt <- data.table(read.table(unz(myzipfilename, myfilename)))

这工作正常,但read.table() 对于大文件很慢,而fread() 无法直接读取unz() 连接。我想知道是否有更好的解决方案。

【问题讨论】:

  • 您可以看看readr 包(Hadley Wickham 的一个)中的read_file 函数。我发现它比基本 R 读取解压缩文件更快,并且文档表明它可以读取压缩文件。

标签: r data.table


【解决方案1】:

看:Read Ziped CSV File with fread 为了避免 tmp 文件,您可以使用 unzip 和 -p 提取文件来管道,没有消息

您可以将这种语句与 fread 一起使用。

x = fread('unzip -p test/allRequests.csv.zip')

或者使用gunzip

x = fread('gunzip -cq test/allRequests.csv.gz')

您也可以使用 grep 或其他工具。

【讨论】:

  • 使用预处理命令时值得添加 data.table 开发人员建议使用 cmd arg,例如fread(cmd = 'unzip -p test/allRequests.csv.zip') 出于安全原因。
  • 我必须将我的 unzip.exe 文件复制到我的工作 R 目录才能正常工作。
  • unzip 或 gunzip 必须在 $PATH 中。
猜你喜欢
  • 1970-01-01
  • 2021-04-30
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多