【问题标题】:R: performence, memory use. Writing a text file or keeping all the information in R objects?R:性能,内存使用。编写文本文件或将所有信息保存在 R 对象中?
【发布时间】:2013-03-27 12:25:52
【问题描述】:

通过迭代,我构造了一个非常大的矩阵,为了加快这些迭代,我将这个矩阵分成块,然后放入一个列表中。

我最好将我的矩阵块保存到一个文本文件中,并将新块附加到同一个文本文件中,而不是将它们全部保存在一个列表中。它在内存使用和性能(运行模拟的时间)方面有什么改变吗?

第二个问题:有没有办法知道 R 对象的内存大小(无需将其保存到 .Rdata 文件中)

提前谢谢你!

【问题讨论】:

  • 我想说,如果您可以将所有内容保存在 RAM 中,那么这样做会更快。如果内存不足,可以将对象保存到 .Rdata 文件中(使用save),这比文本文件快,然后在需要时使用load。
  • @Juba 感谢您的回答。那么有没有办法知道给定 R 对象的内存大小(无需将其保存到 .Rdata 文件中)?
  • 可以使用object.size()函数。
  • 为什么不试试看呢?
  • 如果您一次保存一个对象,我会使用saveRDS() 而不是save()。文档中的save() 用于“将一个或多个命名对象保存并恢复到环境中”。同样出于速度目的,请考虑您要使用的压缩方式。 save() 和 saveRDS() 有压缩或不压缩选项,可以加快速度。我认为(但尚未测试任何东西)在不压缩的情况下保存/加载对象可能会更快。但是,如果这很重要,那么您的缺点是文件更大。

标签: performance r memory-management


【解决方案1】:

如果可能,将矩阵保留在 RAM 中。否则你也可以查看bigmemory package。

并且最新版本的 R 对大向量有更好的支持。如果您有 64 位计算机和大量 RAM,这将很有帮助。

注意:由于我们在谈论性​​能,所以预先分配矩阵是一个很好的做法(而不是频繁使用 rbind / cbind)

【讨论】:

  • +1 用于预分配!不过请注意,如果矩阵只是结果,即不需要进一步分析,那么在分析期间或之后转储内容并不重要。这当然是假设 RAM 不是问题,否则转储它是有利的。如果在 CPU 密集型期间转储文件,则在分析期间转储文件甚至可以加快速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
相关资源
最近更新 更多