我在使用 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
我理解这与获得连续内存块(来自 给你)的困难有关:
开始的错误信息不能 分配向量的大小表示一个 无法获得记忆 因为大小超过了 进程的地址空间限制, 更有可能,因为这个系统 无法提供内存。注意 在32位版本上 有足够的可用空闲内存,但是 没有足够大的连续块 映射到的地址空间。
我怎么才能避开这个?我的主要困难是,我得到了我的脚本中的某一点和 R 不能分配200-300兆对象... 我不能真正预先分配块,因为我需要的内存为其他处理。即使我努力删除不需要的对象,也会发生这种情况。
编辑: 是的,抱歉: 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