我正在使用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")
答案 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
价: