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

How to see the actual memory size of a big.matrix object of bigmemory package?

我正在使用 bigmemory 包来加载大量数据集,但是当我检查对象的大小时(使用函数 object.size),它总是 returns 664 字节。据我所知,权重应该与 classic R 矩阵几乎相同,但取决于 class (双精度或整数)。那么,为什么我得到的答案是664字节呢?。下面是可重现的代码。第一个块真的很慢,所以可以随意减少模拟值的数量。用 (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")

要确定 bigmemory 矩阵的大小,请使用:

> GetMatrixSize(data)
[1] 9.6e+08

说明

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

大小不一致的原因是data存储了一个指向内存映射文件的指针。您应该能够在计算机的临时目录中找到新文件。 - [引用自 R 高性能编程的段落]

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

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

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

参考:

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