我正在使用包 bigmemory 与 R 中的大型矩阵进行交互。这适用于大型矩阵,除了attach.big.matrix()
重新加载使用创建的二进制文件的函数read.big.matrix()
比原来调用read.big.matrix()
. 这是一个例子:
library(bigmemory)
# Create large matrix with 1,000,000 columns
X = matrix(rnorm(1e8), ncol=1000000)
colnames(X) = paste("col", 1:ncol(X))
rownames(X) = paste("row", 1:nrow(X))
# Write to file
write.big.matrix(as.big.matrix(X), "X.txt", row.names=TRUE, col.names=TRUE)
# read into big.matrix and create backing-file for faster loading the second time
A = read.big.matrix("X.txt", header=TRUE, has.row.names=TRUE, type="double", backingfile="X.bin", descriptorfile="X.desc")
# Attach the data based on the backing-file
G = attach.big.matrix("X.desc")
当列数较少(即 1000)时,代码按预期工作并且attach.big.matrix()
比read.big.matrix()
. 但是对于 1,000,000 列,attach.big.matrix()
速度要慢 10 倍!
另外,请注意,当没有列名(即注释掉colnames(X)
行)时,这个性能问题完全消失了,我可以在零时间内附加。这表明瓶颈在解析中X.desc
,应该有更好的方法attach.big.matrix()
。
与我的真实数据相比,这个矩阵很小。
或者我可以做一些不同的事情吗?
谢谢
系统信息:
Intel Xeon E5-2687W @ 3.10GHz,64 Gb RAM
Ubuntu 12.04.2 LTS
R 3.0.1
bigmemory_4.4.3