2

我正在使用该bigmemory包加载繁重的数据集,但是当我检查对象的大小(使用 function object.size)时,它总是返回664 bytes。据我了解,权重应该与经典的 R 矩阵几乎相同,但取决于类(双精度或整数)。那么,为什么我会得到 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")
4

1 回答 1

1

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

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

解释

存储在 big.matrix 对象中的数据可以是 double(8 字节,默认值)、整数(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;黛博拉·诺兰
于 2016-06-24T23:40:12.220 回答