2

我将尝试解释我的问题。dir1和dir2两个目录共有365个(全局映射)文件,格式、字节、扩展等相同。我bias使用下面给出的函数和代码计算了两个数据集之间的值,如下所示:

我该如何解决这个问题?请

4

1 回答 1

2

我怀疑这是由于 32 位系统的内存限制。您想分配一个 933M 双精度数组,这需要 7.6Gb 的连续内存。我建议您阅读?Memory?"Memory-limits"了解更多详细信息。特别是,后者说:

以“cannot allocate vector of size”开头的错误消息表明无法获取内存,这可能是因为大小超出了进程的地址空间限制,或者更可能是因为系统无法提供内存。请注意,在 32 位构建中,可能有足够的可用内存,但没有足够大的连续地址空间块来映射它。

如果这确实是您的问题,您可以查看bigmemory包(http://cran.r-project.org/web/packages/bigmemory/index.html),它允许管理具有共享和基于文件的内存的大量矩阵。还有其他策略(例如使用 SQLite 数据库)来管理无法一次全部放入内存的数据。

更新。以下是Windows内存限制的摘录:

在 32 位 Windows 下,地址空间限制为 2Gb,除非操作系统的默认值已更改为允许更多(最高 3Gb)。请参阅http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspxhttp://msdn.microsoft.com/en-us/library/bb613473(VS.85).aspx。在大多数 64 位版本的 Windows 中,R 的 32 位版本的限制是 4Gb:对于最旧的版本,它是 2Gb。R 的 64 位构建(由操作系统强加)的限制是 8Tb。

即使在 64 位 Windows 上,通常也不可能在 32 位 R 构建中为单个向量分配多达 2Gb,因为 Windows 在地址空间中间进行了预分配。

在 Windows 下,R 对单个会话可用的总内存分配施加了限制,因为操作系统没有提供这样做的方法:请参阅 memory.size 和 memory.limit。

于 2013-07-10T18:54:44.230 回答