У меня возникают проблемы с попыткой использовать большие объекты в 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-битной сборке вполне может достаточно свободной памяти, но не достаточно большой смежный блок адресное пространство, в которое его можно сопоставить.
Как я могу обойти это? Моя основная трудность заключается в том, что я добираюсь до определенного момента в моем script, а R не может выделить 200-300 Мб для объекта... Я не могу предварительно выделить блок, потому что мне нужна память для другой обработки, Это происходит даже тогда, когда я удаляю ненужные объекты.
Edit: Windows XP SP3, оперативная память 4 ГБ, 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