从文件存储的数据帧(ffdf)中进行子集超出了内存

时间:2012-10-19 21:55:30

标签: r statistics

我正在使用32位Windows计算机上大约17M x 4值的数据集。这需要~700 MB的GNU R - 所以当我尝试进行一些增强操作时,很容易达到2 GB的限制,并且我收到内存不足错误(无法分配矢量......)。

没问题 - 有一个软件包“ff”将这些数据存储在磁盘上。但是我的第一个子集在同一个错误中出现问题。根据ff文档,我预计“[”将直接子集到另一个ffdf而不将两个数据副本加载到内存中。我哪里错了?

ffshares = read.table.ffdf(
  file=tmpFilename, header = FALSE, sep = ",", quote = "\"",
  dec = ".",
  col.names = c("articleID", "measure", "time", "value"),
  na.strings = c("","-1","\\N"),
  colClasses = c("integer","factor","POSIXct","integer"),
  check.names = TRUE, fill = TRUE,
  strip.white = FALSE, blank.lines.skip = TRUE,
  comment.char = "",
  allowEscapes = F, flush = F #, nrow=1000
)
# Until here, the R process requires about 200M

ffshares = ffshares[ffshares[,"articleID"] %in% articles[,"articleID"],]
# As I try this, memory consumption exceeds 1.7G and the available limits

注意:文章是一个行数约为30K的数据框。 articleID是一个简单的整数。

奖金问题:ffshares [,“articleID”]有效,但ffshares $ articleID没有。根据文档,美元($)应该像数据框一样工作?!

感谢您的任何建议:)

1 个答案:

答案 0 :(得分:-1)

我很抱歉这不是您问题的直接答案,但我已将bigmemory package用于类似大小的对象。 fi lebacked.big.matrix函数和大矩阵优化运算符。如果您没有直接回答问题,您可能会发现它很有用。