【问题标题】:Predict memory usage in R预测 R 中的内存使用情况
【发布时间】:2014-10-29 17:15:35
【问题描述】:

我从 UCI 机器学习数据集库下载了一个大文件。 (~300mb)。

有没有办法在将数据集加载到 R 内存之前预测加载数据集所需的内存?

谷歌了很多,但我能找到的所有地方都是如何使用 R-profiler 和其他几个包计算内存,但在将对象加载到 R 之后。

【问题讨论】:

  • 取决于它的存储方式(以及存储方式)。基本上您可以使用 C 等效值进行计算,然后添加一些 R 开销。
  • 根据经验,我注意到如果我压缩一个 csv 文件,压缩后的文件的大小与其对应的 .RData 文件大小差不多。
  • 请理解 300MB 是一个适度的文件,而不是“巨大”。

标签: r memory


【解决方案1】:

基于“R 编程”coursera 课程,U 可以使用数据中的行数和列数计算近似内存使用情况“U 可以从代码框/元文件中获取该信息”

需要内存 = 否。列 * 编号行数 * 8 字节/数字

例如,如果您有 1,500,00 行和 120 列,则需要超过 1.34 GB 的备用内存

你也可以对其他类型的数据应用相同的方法,注意用于存储不同数据类型的字节数。

【讨论】:

  • 我会使用 10 而不是 8 作为字节/数字系数,并且我会使用三倍来计算需要多少连续空间。如果材料只是字符数据,那么比率只会在 1.1 左右,如果以因子数据的形式读取,则可能会低于 1。
【解决方案2】:

如果您的数据存储在 csv 文件中,您可以先读取文件的一个子集,然后使用 object.size 函数计算内存使用量(以字节为单位)。然后,您可以使用wc 命令行实用程序计算文件中的总行数,并使用行数来缩放子集的内存使用量,以估算总使用量:

top.size <- object.size(read.csv("simulations.csv", nrow=1000))
lines <- as.numeric(gsub("[^0-9]", "", system("wc -l simulations.csv", intern=T)))
size.estimate <- lines / 1000 * top.size

大概有一些对象开销,所以我预计size.estimate 会高估加载整个 csv 文件时的总内存使用量;如果您使用更多的行来计算top.size,这种效果将会减弱。当然,如果文件的前 1000 行不能代表整个文件内容,这种方法可能会不准确。

【讨论】:

    【解决方案3】:

    R 具有函数 object.size(),它提供了用于存储 R 对象的内存的估计值。 你可以这样使用:

      predict_data_size <- function(numeric_size, number_type = "numeric") {
      if(number_type == "integer") {
        byte_per_number = 4
      } else if(number_type == "numeric") {
        byte_per_number = 8 #[ 8 bytes por numero]
      } else {
        stop(sprintf("Unknown number_type: %s", number_type))
      }
      estimate_size_in_bytes = (numeric_size * byte_per_number)
      class(estimate_size_in_bytes) = "object_size"
      print(estimate_size_in_bytes, units = "auto")
    }
    # Example
    # Matrix (rows=2000000, cols=100)
    predict_data_size(2000000*100, "numeric") # 1.5 Gb
    

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多