【发布时间】:2018-02-10 12:47:36
【问题描述】:
我有一个 4 Gb 的 csv 文件要加载到我的 16Gb 机器中,fread 和 read.csv 无法立即加载它,它们返回内存错误。
所以我决定逐块读取文件,它工作了(大约一小时后),如果我信任 RStudio 中的环境选项卡和 1.2保存为 RDS 时为 Gb。
我现在遇到的问题是将所有内容连接回一个大的data.frame。据我了解rbindlist 是最有效的解决方案(或者是bind_rows?),但在我的情况下它仍然使用太多内存。
我想我可以通过在n 的列表项n 上使用rbindlist 来解决这个问题,然后递归直到我得到最终列表。这个n 数字必须手动校准,而且这个过程真的很难看(除了这个烦人的 csv 导入之外)。
我想到的另一个想法是找到一种方法,从我加载的数据中提供一个 SQLite 数据库,然后从 R 中查询它(我只会在数据)。
我能做得比这更好吗?
我的数据仅由 integer 和 double 组成,如果有影响的话。
【问题讨论】:
-
如果你的数据只是数字,为什么要构造一个data.frame(为什么不是矩阵?/稀疏矩阵)
-
将数据放入数据库
-
@docendo-discimus 我会很高兴如果我得到一个大矩阵,虽然在这一点上我认为将它转换为
data.frame不会花费太多@ -
我会选择 sqlite。阅读这个问题的第一个答案:stackoverflow.com/questions/4332976/…
-
是的,bigmemory 很棒...不幸的是,有一段时间它不适用于 windows,所以我停止使用它(我必须在我的公司使用 windows)...但是现在看来它又可以在 MS OS 上使用了,很高兴知道
标签: r rbindlist large-data