【发布时间】:2019-06-09 10:38:47
【问题描述】:
我有一个具有以下结构的数据集:
require(data.table)
train <- data.table(sample(1:10, 10), runif(10, 0, 10))
但是,数据集的内存约为 7.5 GB,行数约为 6.3 亿。尝试summary(train) 会产生错误:Error: cannot allocate vector of size 2.3 Gb。我可以通过手动调用train[, mean(V2)]、train[, min(V2)]和train[, max(V2)]来提取一些信息,但是中位数和分位数会导致OOM。是否有可能在 16GB RAM 的机器上进行这些操作?
一个想法是拆分数据集,但这对于中位数和分位数来说有点麻烦
【问题讨论】:
-
sapply(train, summary)? -
或者一次处理一个向量。您还可以考虑将数值变量存储为矩阵,然后使用
bigmemory包来计算此类统计数据。 -
@YalDan 反馈?
-
抱歉回复晚了,进行了 2 天的数字排毒,没有看到您为此付出的惊人努力
sapply(train, summary)给了我完全相同的 OOM 消息,但这个想法是我的目标也是如此。 @Imo 我相信这就是@minem 和sapply的解决方案无论如何都会做的对吗?关于bigmemory包:加载数据非常缓慢,但我能够获得median、min和max值。不幸的是,分位数会导致 OOM。此外,虽然比ff慢,但我更喜欢它,因为它更易于使用。我现在会检查你的答案@minem,谢谢!
标签: r performance memory-management bigdata