Je rencontre des problèmes en essayant d'utiliser des objets volumineux dans R. Par exemple:
> 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
Je comprends que cela est lié à la difficulté d'obtenir des blocs de mémoire contigus (à partir d' ici ):
Les messages d'erreur commençant ne peut pas allouer de vecteur de taille indiquent un échec d'obtention de mémoire, soit parce que la taille a dépassé la limite d'espace d'adressage pour un processus ou, plus probablement, parce que le système n'a pas pu fournir la mémoire. Notez que sur une version 32 bits, il peut bien y avoir suffisamment de mémoire disponible, mais pas un bloc suffisamment grand d'espace d'adressage contigu pour le mapper.
Comment puis-je contourner cela? Ma principale difficulté est que j'arrive à un certain point de mon script et que R ne peut pas allouer 200-300 Mb pour un objet ... Je ne peux pas vraiment pré-allouer le bloc car j'ai besoin de mémoire pour d'autres traitements. Cela se produit même lorsque je supprime soigneusement les objets inutiles.
EDIT: Oui, désolé: Windows XP SP3, 4 Go 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
et Free
mémoire, mais je soupçonne que ce n'est pas ce que fait Benjamin.