我在尝试在 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
我知道这与获取连续内存块的难度有关(从这里):
以 cannot allocate vector of size 开头的错误消息表明无法获得内存,要么是因为大小超过了进程的地址空间限制,要么更可能是因为系统无法提供内存。请注意,在 32 位构建中,可能有足够的可用内存,但没有足够大的连续地址空间块来映射它。
我怎样才能解决这个问题?我的主要困难是我在脚本中到达了某个点,而 R 无法为对象分配 200-300 Mb ......我无法真正预先分配块,因为我需要内存用于其他处理。即使我努力删除不需要的对象,也会发生这种情况。
编辑:是的,抱歉: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