gpt4 book ai didi

R 内存管理/无法分配大小为 n Mb 的向量

转载 作者:行者123 更新时间:2023-12-03 06:13:09 37 4
gpt4 key购买 nike

我在尝试在 R 中使用大型对象时遇到问题。例如:

> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for

据我了解,这与获取连续内存块的难度有关(来自 here ):

Error messages beginning cannot allocate vector of size indicate a failure to obtain memory, either because the size exceeded the address-space limit for a process or, more likely, because the system was unable to provide the memory. Note that on a 32-bit build there may well be enough free memory available, but not a large enough contiguous block of address space into which to map it.

我该如何解决这个问题?我的主要困难是,我在脚本中到达某个点,而 R 无法为对象分配 200-300 Mb...我无法真正预分配该 block ,因为我需要内存用于其他处理。即使我努力删除不需要的对象,也会发生这种情况。

编辑:是的,抱歉:Windows XP SP3、4Gb RAM、R 2.12.0:

> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

最佳答案

考虑一下您是否真的需要显式地需要所有这些数据,或者矩阵可以是稀疏的吗? R 中对稀疏矩阵有很好的支持(例如,请参见 Matrix 包)。

当您需要创建此大小的对象时,请将 R 中的所有其他进程和对象保持在最低限度。使用 gc() 清除现在未使用的内存,或者,更好的是仅在一个 session 中创建您需要的对象

如果上述方法没有帮助,请购买一台具有尽可能多 RAM 的 64 位计算机,并安装 64 位 R。

如果您无法做到这一点,有许多用于远程计算的在线服务。

如果您无法做到这一点,内存映射工具,例如 ff 包(或 Sascha 提到的 bigmemory)将帮助您构建新的解决方案。根据我有限的经验,ff 是更高级的软件包,但您应该阅读 CRAN 任务 View 上的高性能计算 主题。

关于R 内存管理/无法分配大小为 n Mb 的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492006/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com