【问题标题】:How to see the actual memory size of a big.matrix object of bigmemory package?如何查看 bigmemory 包的 big.matrix 对象的实际内存大小?
【发布时间】:2016-06-24 22:04:13
【问题描述】:

我正在使用bigmemory 包加载繁重的数据集,但是当我检查对象的大小时(使用函数object.size),它总是返回664 字节。据我了解,权重应该与经典的 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")

【问题讨论】:

    标签: r r-bigmemory


    【解决方案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;威廉 Tjhi
    • R 中的数据科学 作者:Duncan Temple Lang;黛博拉·诺兰

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 2012-11-27
      • 2017-03-31
      • 2018-10-08
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多