【发布时间】:2013-05-28 15:59:36
【问题描述】:
过去几天我一直在发布一个问题,我需要创建一个 7000x7000 距离矩阵。在内存上做这一切给了我无法分配向量错误。我使用的是 Windows XP SP 3、3GB RAM、32 位系统。我原本想使用 bigmemory 库,但它似乎不适用于 Windows。我在ff package 上做了一些阅读,所以这就是我目前的想法:
require(ff)
ffmat <- ff(vmode="double", dim=c(7000,7000))
ffmat <- as.matrix(dist(data[1:7000, ], diag=TRUE, upper=TRUE))
问题是我仍然遇到向量分配错误。请注意dim(data) = 7000x182(很多变量)。
运行gc() 事后检查会使memory.size() 恢复到正常水平。就好像 R 在写入创建的 ff 之前将结果存储在内存中。有没有办法解决?
【问题讨论】:
-
您可以查看
mmap而不是ff。我从来没有真正开始研究它,但它可能值得你研究。 -
你期望什么,data[1:7000, ] 正在将你的 ff 矩阵放入 RAM 中,正如 ff 手册所示(参见 ?Extract.ff)。
-
@jwijffels 感谢您指出这一点。但是,从文档中并不完全清楚这将如何在矩阵上工作。假设我将数据矩阵 7000x180 写入 ff 对象 - ffmat。然后我使用
ffmat2 <- ff(vmode="double", dim=c(7000, 7000))创建第二个ff 对象。我如何在不使用 RAM 的情况下实际与我的 ffmat 对象保持距离?该文档显示了从一个 ff 对象到另一个的简单分配,但没有关于使用外部方法。 -
你看过rmazing.wordpress.com/2013/02/22/…,看看人们是如何使用 ff 解决类似问题的吗?
-
@jwijffels 非常感谢!我能够从网站上获取示例并根据我的需要对其进行轮廓化。当我制定细节时,我会发布一个完整的实现。