【发布时间】:2012-03-19 11:16:50
【问题描述】:
我有一个大约 900MB 内存的大数据框。然后我尝试像这样修改它:
dataframe[[17]][37544]=0
似乎使 R 使用超过 3G 的内存并且 R 抱怨“错误:无法分配大小为 3.0 Mb 的向量”,(我在 32 位机器上。)
我发现这种方式更好:
dataframe[37544, 17]=0
但 R 的占用空间仍然增加了一倍,并且该命令需要相当长的时间才能运行。
从 C/C++ 背景来看,我对这种行为感到非常困惑。我认为像dataframe[37544, 17]=0 这样的事情应该在不消耗任何额外内存的情况下瞬间完成(应该只修改一个单元格)。 R 对我发布的那些命令做了什么?那么在不使内存占用加倍的情况下修改数据框中的某些元素的正确方法是什么?
非常感谢您的帮助!
道
【问题讨论】:
-
(Base) R 在处理大型数据结构方面并不出名。您需要研究 ff、bigmemory 和 data.table 包的某种组合。
-
这不是真的 - data.frames 以低效着称,但如果您关心效率,则应该使用(基础)R 中非常有效的结构。
-
@SimonUrbanek 是的,我的措辞很糟糕。我的意思正是你所说的,数据框往往效率低下,而且我提到的包通常对处理大数据的人有用。
-
@Simon 喜欢什么?
matrix仅限于普通列类型,不能像data.frame一样大。你是在建议list吗?