-1

我非常希望 R 拥有的一个特性是虚拟向量和矩阵,它们没有存储空间,但实际上是及时计算其成员的函数的接口。

这种特征的一个应用是对距离度量计算成本低的大量项目进行分层聚类。目前dist将所有距离存储在内存中,因此我最多只能使用它对 20,000 个项目进行分类。但我想做更多。由于hclust允许用户提供 dist 矩阵,因此这样的函数将允许我解决内存限制。

一个相关但不太通用的功能是文件映射向量和矩阵,即使用文件作为虚拟内存。

有没有一个包可以做到这一点?写一个简单吗?如果我想自己实现这个,我应该从哪里开始寻找?

4

1 回答 1

1

R 确实为看起来像变量的东西提供了一些工具,但它是一个幕后的函数(称为活动绑定):

> makeActiveBinding("rand.x", function(...) rnorm(1,100,10), .GlobalEnv)
> rand.x
[1] 94.1004
> rand.x
[1] 109.3716

(但使用它要非常小心,它会导致代码晦涩难懂且难以追踪错误)

您还可以使用@Peyton 提到的动态计算的子集方法创建对象类型。

正如评论中所指出的,有像 ff 这样的包将在磁盘上存储一个大数据对象,但让您可以像在内存中一样访问片段。

但是,这些都不可能实现您所描述的。集群库中的函数agnes将那里的参数传递给另一个函数,例如data.tableoras.dist这将有效地复制您的对象(或单次运行该函数的结果)。因此 ff 对象将被完全加载到内存中,并且[将预先调用一次主动绑定或方法来创建整个矩阵,然后从那时起使用其副本。

如果你真的想要这个功能(我当然可以看到它的用途),最好重写集群(或其他)函数以接受一个函数而不是数据或距离矩阵。您可以按原样从函数开始,只删除不再需要的部分,并将从数据中提取的部分更改为对提供距离信息的函数的调用。

于 2013-07-19T16:03:03.277 回答