【问题标题】:Why would a read-in variable consumes way more memory than file's storage size in R为什么读入的变量会比 R 中文件的存储大小消耗更多的内存
【发布时间】:2013-01-31 21:23:09
【问题描述】:

当我尝试将一个实际大小为 672MB 的大文件读入 R 时,结果发现系统内存使用量从 0.98 G 激增至 3.6 G(我使用的是 4 GB 内存的桌面)。这意味着将文件存储到内存中需要数倍的空间,并且在我读入内存不足后我无法进行任何计算。这正常吗? 我使用的代码:a=read.table(file.choose(),header=T,colClasses="integer",nrows=16777777,comment.char="",sep="\t") 该文件包含 167772XX 行。

gc() 之前和之后我运行

不知道这是什么意思。

【问题讨论】:

标签: r memory read.table


【解决方案1】:

您的文本文件为 672MB。假设你所有的整数都是 1 位,那么你的 R 对象大约是 2*672MB 是完全合理的。

文本文件中的每个字符都是 1 个字节。 R 将整数存储在 4 个字节中(请参阅?integer)。这意味着您的文件包含约 336MB 的 "\t" 和约 336MB 的存储为 1 字节字符的整数。

R 读取那些 1 字节的字符,将它们存储为 4 字节的整数和... 336*4 = 1344MB。 gc 输出的第二行和第二列读取 1345.6,等于 1344MB + 原始 1.6MB。

【讨论】:

  • 谢谢,从0.98G到3.6G,用了~2.6G,按你说的,只用了~1.3G,那剩下的1.3G呢?
  • @lolibility: gc 报告最大使用量为 2.62GB,这是因为您的对象被复制到 read.table 中。
  • 那么,有没有办法清理那些复制的记忆呢?如果清理干净,我将有 1.3G 空闲,并且可能可以对我的数据进行一些计算。
  • @lolibility:这就是gc 所做的,但它只使内存可供操作系统使用;这并不意味着操作系统会立即回收它。
猜你喜欢
  • 2011-05-10
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2019-09-30
  • 2018-10-10
相关资源
最近更新 更多