【发布时间】:2017-01-06 00:27:54
【问题描述】:
我正在将多个文件一起读取到数据帧列表中,以便能够将函数应用于组合数据,但是当我有太多数据帧时,我遇到了内存分配问题(“错误:R 无法分配内存” )。
例如读取的数据帧数量可变,现在假设为 3 个数据帧:
x = data.frame(A=rnorm(100), B=rnorm(200))
y = data.frame(A=rnorm(30), B=rnorm(300))
z = data.frame(A=rnorm(20), B=rnorm(600))
listDF <- list(x,y,z)
错误:R 无法分配内存
我想知道这里是否有人知道例如 [ 数组或具有许多列的单个数据帧 ] 是否是一种更有效的存储和操作数据帧的方法。
数据框列表是一种非常实用的方法,因为我可以根据数据框的名称来操作数据中的许多列,在处理可变数量的数据框时这很方便。无论如何,如果有任何想法/您喜欢这样做的任何方式,请分享它们:) 谢谢!
【问题讨论】:
-
使您正在执行的实际代码更有效地使用内存需要查看特定代码。从广义上讲,如果您达到 RAM 限制,可以 (1) 获得一台具有更多 RAM 的计算机(例如“在云中”),或者 (2) 将磁盘上的数据保存在 files/db 中,并且只提取更小的 RAM一次处理一个块。
-
谢谢丹尼尔!我将尝试 data.table 解决方案,我不能做的矩阵,因为我的两列都有字符和数字......谢谢!!
-
我不确定 Daniel 的链接有多相关 - 它似乎专注于将数据添加到单个数据帧而不是多个数据帧。占用内存的是你的数据框,不管是全局环境中的数据框、列表中的数据框、列表中的数据表还是全局环境等,都无所谓。数据本身就是什么正在占用内存空间。
-
如果数据中有很多零,您可以使用稀疏矩阵。否则按照@joran 的建议去做:获取更多内存或分块分析。
标签: r memory storage data-manipulation