【问题标题】:fread: file not foundfread:找不到文件
【发布时间】:2014-10-10 14:57:22
【问题描述】:

我正在尝试使用 data.table 包中的 fread 打开一个 2.2G 文件,但一直收到相同的错误(它适用于其他文件,1G 难度较小):

library(data.table)
data.table 1.9.4  For help type: ?data.table
*** NB: by=.EACHI is now explicit. See README to restore previous behaviour.

train  = data.table::fread('train.csv')

Error in data.table::fread("train.csv") : file not found: train.csv

当然,该文件存在(read.csv() 有效,但速度很慢)。 我在 i686 上运行 Ubuntu 12.04 LTS。感谢任何帮助!

注意:我正在尝试读取的文件是“train.gz”,可以在以下位置找到: https://www.kaggle.com/c/tradeshift-text-classification/data.

这是一个 2.2G 的 csv 文件,很标准。

编辑:当我使用verbose=TRUE 时,它说:

Input contains no \n. Taking this to be a filename to open

【问题讨论】:

  • 你确定你已经设置了正确的工作目录并且list.files(pattern="train.csv")返回了文件信息?
  • 这是肯定的,read.csv 工作,认为它很慢。此外,fread 适用于同一目录中的其他文件。
  • 您使用的是哪个版本的 data.table?对于不存在的文件,我没有收到相同的错误。
  • 版本 1.9.4,详见编辑。谢谢!
  • 如果文件不存在,它应该给出一个类似Error in fread("train.csv") : File is empty: /dev/shm/file1231231391的错误。所以它似乎比这更复杂......你有没有在任何其他大文件上尝试过?也许它由于大小而失败,但只是抛出一个误导性错误?

标签: r data.table


【解决方案1】:

要在 32 位 Linux 系统上打开大文件,需要为 open 函数提供 O_LARGEFILE 选项,而 fread 没有这样做。这是一个 open 调用实际上失败了,但它被错误地报告为“找不到文件”错误。

启用大文件支持的另一种方法是在安装包时将-D_FILE_OFFSET_BITS=64 选项传递给编译器。卸载并删除data.table,将以下内容放入~/.R/Makevars

CFLAGS=-D_FILE_OFFSET_BITS=64

然后发出R CMD INSTALL /path/to/data.table_X.Y.Z.tar.gz。新安装的包将在 32 位系统上成功打开大文件。

【讨论】:

    【解决方案2】:

    结束话题:我将我的 Ubuntu 升级到 x86-64,现在 fread 工作正常。

    只是一个帮助开发者的总结:

    1-下载了一个大文件(本例为2.2G)

    2-尝试用fread读取,报错:file not found: train.csv

    我使用的是 Ubuntu 12.04 LTS x86 和 R 最后一个稳定版本。

    正如指出的那样,在这种情况下工作的较小文件 (~731 MB)。 无论如何感谢您的帮助!

    【讨论】:

    • 在 Mageia Linux 5 32 位(R 3.2.3,data.table 1.9.6)中也是如此。文件是2.5G CSV,症状一模一样。明天试试 64 位版本并报告结果。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多