- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 ff/ffdf 和 ffdfdply 函数时遇到“错误:无法分配大小为...MB 的向量”的问题。
我正在尝试使用 ff 和 ffdf 包来处理已键入组的大量数据。数据(以 ffdf 表格格式)如下所示:
x =
id_1 id_2 month year Amount key
1 13 1 2013 -200 11
1 13 2 2013 300 54
2 19 1 2013 300 82
3 33 2 2013 300 70
.... (10+ Million rows)
唯一键是使用类似的东西创建的:
x$key = as.ff(as.integer(ikey(x[c("id_1","id_2","month","year")])))
通过使用键变量分组进行总结,我有这个命令:
summary = ffdfdply(x=x, split=x$key, FUN=function(df) {
df = data.table(df)
df = df[,list(id_1 = id_1[1], withdraw = sum(Amount*(Amount>0),na.rm=T), by = "key"]
df
},trace=T)
使用 data.table 出色的分组功能(想法来自 this discussion )。在实际代码中,有更多函数应用于 Amount 变量,但即使这样我也无法处理完整的 ffdf 表(该表的较小子集可以正常工作)。
似乎 ffdfdply 正在使用大量的 ram,给出:
Error: cannot allocate vector of size 64MB
BATCHBYTES 似乎也无济于事。任何有 ffdffply 经验的人都可以推荐任何其他方法来解决这个问题,而无需将 ffdf 表预先拆分成 block ?
最佳答案
使用 ff/ffbase 最困难的部分是确保您的数据保留在 ff 中,而不是意外地将其放入 RAM 中。一旦您将数据放入 RAM(主要是由于对何时将数据放入 RAM 以及何时不放入 RAM 的一些误解),很难从 R 取回 RAM,并且如果您正在处理 RAM 限制,一个小的额外 RAM 请求将得到你的“错误:无法分配大小的向量”。
现在,我认为您错误地指定了 ikey 的输入。查看 ?ikey
,它需要一个 ffdf 作为输入参数,而不是几个 ff 向量。可能这已将您的数据放入 RAM 而您想要的可能是使用 ikey(x[c("id_1","id_2","month","year")])
它在我的计算机上模拟了一些数据,如下所示,得到了一个 24Mio 行的 ffdf,并且以下不会给我 RAM 带来麻烦(它在我的机器中使用了大约 3.5Gb 的 RAM)
require(ffbase)
require(data.table)
x <- expand.ffgrid(id_1 = ffseq(1, 1000), id_2 = ffseq(1, 1000), year = as.ff(c(2012,2013)), month = as.ff(1:12))
x$Amount <- ffrandom(nrow(x), rnorm, mean = 10, sd = 5)
x$key <- ikey(x[c("id_1","id_2","month","year")])
x$key <- as.character(x$key)
summary <- ffdfdply(x, split=x$key, FUN=function(df) {
df <- data.table(df)
df <- df[, list(
id_1 = id_1[1],
id_2 = id_2[1],
month = month[1],
year = year[1],
withdraw = sum(Amount*(Amount>0), na.rm=T)
), by = key]
df
}, trace=TRUE)
另一个原因可能是您在 RAM 中有太多您没有谈论的其他数据。还要注意,在 ff 中,你所有的因子水平都在 RAM 中,如果你正在处理大量字符/因子数据,这也可能是一个问题 - 在这种情况下,你需要问自己是否真的需要这些数据分析与否。
关于r - ffdfdply,R 中的拆分和内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262989/
我对 R 的 ffdfdply 函数有疑问 a=as.ffdf(data.frame(b=11:20,c=c(4,4,4,4,4,5,5,5,5,5), d=c(1,1,1,0,0,0,1,0,1,1
我使用 ff/ffdf 和 ffdfdply 函数遇到“错误:无法分配大小为 ...MB 的向量”问题。 我正在尝试使用 ff 和 ffdf 包来处理已键入组的大量数据。数据(以 ffdf 表格式)如
我在使用 ff/ffdf 和 ffdfdply 函数时遇到“错误:无法分配大小为...MB 的向量”的问题。 我正在尝试使用 ff 和 ffdf 包来处理已键入组的大量数据。数据(以 ffdf 表格格
我是一名优秀的程序员,十分优秀!