Sto riscontrando problemi nel tentativo di utilizzare oggetti di grandi dimensioni in R. Ad esempio:
> 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
Capisco che questo è legato alla difficoltà di ottenere blocchi di memoria contigui (da qui ):
L'inizio dei messaggi di errore non può allocare un vettore di dimensione indica un errore nell'ottenere memoria, perché la dimensione ha superato il limite di spazio indirizzo per un processo o, più probabilmente, perché il sistema non è stato in grado di fornire la memoria. Si noti che su una build a 32 bit potrebbe essere disponibile memoria sufficiente, ma non un blocco contiguo abbastanza grande di spazio di indirizzi in cui mapparlo.
Come posso aggirare questo? La mia difficoltà principale è che arrivo a un certo punto nel mio script e R non può allocare 200-300 Mb per un oggetto ... Non riesco davvero a pre-allocare il blocco perché ho bisogno della memoria per altre elaborazioni. Questo succede anche quando rimuovo con durezza gli oggetti non necessari.
EDIT: Sì, scusa: 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
Calloc
e Free
memoria, ma sospetto che questo non sia ciò che Benjamin sta facendo.