Mam problemy z używaniem dużych obiektów w R. Na przykład:
> 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
Rozumiem, że jest to związane z trudnością uzyskania ciągłych bloków pamięci ( stąd ):
Komunikaty o błędach rozpoczynające się nie mogą przydzielić wektora rozmiaru wskazują na niepowodzenie w uzyskaniu pamięci, ponieważ rozmiar przekracza limit przestrzeni adresowej dla procesu lub, co bardziej prawdopodobne, ponieważ system nie był w stanie zapewnić pamięci. Należy zauważyć, że w przypadku kompilacji 32-bitowej może być wystarczająco dużo dostępnej pamięci, ale nie wystarczająco duży ciągły blok przestrzeni adresowej, na który można by go zmapować.
Jak mogę to obejść? Moją główną trudnością jest to, że docieram do pewnego punktu w moim skrypcie, a R nie może przydzielić 200-300 Mb dla obiektu ... Tak naprawdę nie mogę wstępnie przydzielić bloku, ponieważ potrzebuję pamięci do innego przetwarzania. Dzieje się tak nawet wtedy, gdy skrupulatnie usuwam niepotrzebne przedmioty.
EDYCJA: Tak, przepraszam: Windows XP SP3, 4 Gb 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
i z Free
pamięcią, ale podejrzewam, że to nie jest to, co robi Benjamin.