Me encuentro con problemas al tratar de usar objetos grandes en R. Por ejemplo:
> 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
Entiendo que esto está relacionado con la dificultad de obtener bloques contiguos de memoria (desde aquí ):
Los mensajes de error que comienzan no pueden asignar el vector de tamaño indican que no se pudo obtener memoria, ya sea porque el tamaño excedió el límite de espacio de direcciones para un proceso o, más probablemente, porque el sistema no pudo proporcionar la memoria. Tenga en cuenta que en una compilación de 32 bits puede haber suficiente memoria libre disponible, pero no un bloque contiguo de espacio de direcciones lo suficientemente grande como para asignarlo.
¿Cómo puedo evitar esto? Mi principal dificultad es que llego a cierto punto en mi script y R no puede asignar 200-300 Mb para un objeto ... Realmente no puedo preasignar el bloque porque necesito la memoria para otro procesamiento. Esto sucede incluso cuando elimino diligentemente objetos innecesarios.
EDITAR: Sí, lo siento: Windows XP SP3, 4 Gb de 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
Calloc
y con Free
memoria, pero sospecho que esto no es lo que Benjamin está haciendo.