【问题标题】:Error: memory exhausted (limit reached?) // Error: cannot allocate vector of size 1.3 Mb错误:内存耗尽(达到限制?)//错误:无法分配大小为 1.3 Mb 的向量
【发布时间】: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.csvfread 并且由于可以通过不同的解析算法解释的小精度差异,大约 500 个单元格具有不同的内部值。跨度>
  • @user2115112 我无法在我的计算机上重现该问题(Ubuntu 14.04 和 RStudio 中的 R3.3.3。是否可以在 read.csv 失败的另一台计算机上安装确切的工作版本 R?可以复制文件时可能有问题吗?请您尝试使用nrows 参数仅读取前n 行并尝试通过“平分”nrows 找出限制吗?
  • @user2115112 简短更新:我检查了bugs.r-project.org/bugzilla3,但找不到与您描述的内容相关的任何打开或已关闭的错误。

标签: r csv ubuntu memory


【解决方案1】:

尝试在您的设置中删除几行库。因为一些库实际上是从一个更大的库中屏蔽的。加载它们会导致很多问题。不是实际的数据集。 (至少对我来说是这样)在我删除了几行库设置后,我能够编织 R 降价。希望对您有所帮助。

【讨论】:

  • 我没想到会这样,但实际上我有在登录 R 时包含一大堆库的习惯。删除闪亮、传单和 + 使这个内存错误消失了。
猜你喜欢
  • 2018-12-07
  • 2019-07-10
  • 1970-01-01
  • 2018-12-17
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多