如何查看bigmemory包的big.matrix对象的实际内存大小?

时间:2016-06-24 22:04:14

标签: r r-bigmemory

我正在使用bigmemory包来加载繁重的数据集,但是当我检查对象的大小(使用函数object.size)时,它总是返回 664字节 。据我所知,重量应该与经典的R矩阵几乎相同,但取决于类(双或整数)。那么,为什么我得到664字节作为答案?下面是可重现的代码。第一个chunck非常慢,所以可以随意减少模拟值的数量。用(10 ^ 6 * 20)就足够了。

# CREATE BIG DATABASE -----------------------------------------------------  
data <- as.data.frame(matrix(rnorm(6 * 10^6 * 20), ncol = 20))
write.table(data, file = "big-data.csv", sep = ",", row.names = FALSE)
format(object.size(data), units = "auto")
rm(list = ls())

# BIGMEMORY READ ----------------------------------------------------------  
library(bigmemory)
ini <- Sys.time()
data <- read.big.matrix(file = "big-data.csv", header = TRUE, type = "double")
print(Sys.time() - ini)
print(object.size(data), units = "auto")

1 个答案:

答案 0 :(得分:1)

确定make矩阵的大小:

bigmemory

解释

存储在big.matrix对象中的数据可以是double类型(8字节,默认值),整数(4字节),short(2字节)或char(1字节)。

大小差异的原因是> GetMatrixSize(data) [1] 9.6e+08 存储指向内存映射文件的指针。您应该能够在计算机的临时目录中找到新文件。 - [段落引自R高性能编程]

基本上,bigmatrix在磁盘上维护一个名为后备文件的二进制数据文件,该文件包含数据集中的所有值。当R需要来自bigmatrix对象的值时,将执行检查以查看它们是否已经在RAM(缓存)中。如果是,则返回缓存的值。如果它们未缓存,则从备份文件中检索它们。这些缓存操作减少了跨单独调用访问和操作数据所需的时间,并且它们对统计员来说是透明的。

有关说明,请参阅文档的第8页

https://cran.r-project.org/web/packages/bigmemory/bigmemory.pdf

价:

  • R高性能编程作者:Aloysius Lim; William Tjhi
  • R中的数据科学作者:Duncan Temple Lang;黛博拉诺兰