【问题标题】:Error: cannot allocate vector of size X Mb in R错误:无法在 R 中分配大小为 X Mb 的向量
【发布时间】:2015-10-25 04:39:52
【问题描述】:

我对 R 中的内存使用有疑问。我在 for 循环中在 R 中的整个数据库上运行 Rcode。但是,代码在某些时候停止说它无法分配大小为 325.7 mb 的向量。当我查看任务管理器时,我看到它在我们的服务器上使用了 28gb 的 RAM。

我熟悉 R 中的 gc() 函数,但这似乎不起作用。例如。代码在第 15 次迭代中停止工作,说它无法分配向量。但是,如果我只运行第 15 次迭代(仅此而已),则完全没有问题。此外,对于每个新的迭代,我都会删除我的 DT,它是我的环境中迄今为止最大的对象。

代码示例:

DT <- data.table() 
items <- as.character(seq(1:10)) 
for (i in items){ 
  DT <- sample(x = 5000,replace = T) 
  write.csv(DT,paste0(i,".csv")) 
  gc() 
  rm(DT) 
} 

我感觉这个gc 函数在for 循环中不能正常工作。这是正确的还是有任何其他可能的问题,即在几次迭代后我的记忆是否已满?

【问题讨论】:

  • “我在 R 中的整个数据库上运行一个 Rcode,并在 for 循环中运行。”你的问题不是gc。我确信垃圾收集按预期工作。您的问题是您的代码(您没有显示)。我经常使用 R,但几乎不需要 for 循环。请提供minimal reproducible example
  • 我有一个 1,2,3,...,N 的向量,对于每个 i,我打开一个 RData 文件,计算一些 Basel II 公式并将其再次保存在不同的文件夹中。因此它看起来像这样 for (i in 1:length(banks)) { load() ... do something save() rm(DT) }
  • 例如像这样的 DT

标签: r memory garbage-collection


【解决方案1】:

使用命令 memory.limit() 查看内存限制,然后使用 memory.limit(size=XXX) 扩展它

请注意,这只是一种临时方法,我认为这个 urlR memory management / cannot allocate vector of size n Mb 对如何解决这些问题提供了更好的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多