预测R中的内存使用情况

时间:2014-09-04 20:13:05

标签: r memory

我从UCI机器学习数据集库下载了一个巨大的文件。 (〜300MB)。

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

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

3 个答案:

答案 0 :(得分:6)

基于" R编程"当然,U可以使用数据中的行数和列数计算近似的内存使用量。你可以从codebox / meta文件获得这些信息"

需要内存=否。列*没有。行* 8字节/数字

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

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

答案 1 :(得分:5)

如果您的数据存储在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行不能代表整个文件内容,这种方法可能不准确。

答案 2 :(得分:0)

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