【发布时间】:2017-08-19 23:55:21
【问题描述】:
我遇到了一个奇怪的错误:我在 Ubuntu 16.04 机器上创建了一个 CSV 文件(~450Mb),R 版本为 3.2.3 和 4Gb 内存。每次我尝试在具有 8Gb 和更新版本的 Ubuntu/R(Ubuntu 16.10 和 R 版本 3.3.1(64 位)或 Ubuntu 17.04 和 R 版本 3.3.2(64 位))的机器上读取.csv()这个文件时,它失败了:
Error: memory exhausted (limit reached?) 或
Error: cannot allocate vector of size 1.3 Mb(当我在运行 R 之前大幅增加 ulimit -s 时)。
文件在这里: https://mega.nz/#!ZMs0TSRJ!47DCZCnE6_FnICUp8MVS2R9eY_GdVIyGZ5O9TiejHfc
$ ls -ahl trainWhole.csv
-rw------- 1 gyu gyu 462M Mar 14 10:11 trainWhole.csv
$ R --version
R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
...
$ R --no-save --no-restore-data --quiet
11:00:38 R > sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu Zesty Zapus (development branch)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices datasets utils methods base
11:19:01 R > df <- read.csv("./trainWhole.csv")
Error: memory exhausted (limit reached?)
我尝试修改系统的限制,但没有成功:
$ ulimit -s 819200
$ R --no-save --no-restore-data --quiet
11:00:59 R > df <- read.csv("./trainWhole.csv")
Error: cannot allocate vector of size 1.3 Mb
我在 SO 上发现了一些类似的问题,但没有有效的解决方案...... Error: cannot allocate vector of size X Mb in R R memory management / cannot allocate vector of size n Mb Error: memory exhausted (limit reached?) (R error) Error: cons memory exhausted (limit reached?)
我首先在 R-devel 上发布了这个问题,但他们将我重定向到这里...
我不认为实际上存在内存限制问题,因为文件约为 500MB,我有 8GB 的 RAM,除了 FF 和 R 之外几乎没有任何东西运行:
$ free
total used free shared buff/cache available
Mem: 8043928 1385776 4808796 95288 1849356 6303680
Swap: 4194300 0 4194300
由于在我的 Ubuntu 16.04/4GB 机器上一切正常,我会尝试将我的数据保存为 RData 文件,我几乎可以肯定它会工作,但我很想有一个解释/解决方案在更新版本的 R/Ubuntu 上加载 CSV 文件...
PS:我刚刚尝试过,CSV 文件完美加载在第一代 7" eeePC 上,2GB RAM,运行 Kali Linux...
【问题讨论】:
-
您从未告诉我们
trainWhole.csv有多大。它有多大?它有多少行和多少列? -
你试过从 data.table 包中读取 fread 吗?
-
@KristofferWintherBalling 好主意,
fread可能会解决问题,但问题是为什么read.csv在某些系统或不同的 R 版本上会失败。我可以想象解析许多或特殊的 double 值存在问题(如果比较了read.csv和fread并且由于可以通过不同的解析算法解释的小精度差异,大约 500 个单元格具有不同的内部值。跨度> -
@user2115112 我无法在我的计算机上重现该问题(Ubuntu 14.04 和 RStudio 中的 R3.3.3。是否可以在
read.csv失败的另一台计算机上安装确切的工作版本 R?可以复制文件时可能有问题吗?请您尝试使用nrows参数仅读取前n 行并尝试通过“平分”nrows 找出限制吗? -
@user2115112 简短更新:我检查了bugs.r-project.org/bugzilla3,但找不到与您描述的内容相关的任何打开或已关闭的错误。