Я сталкиваюсь с проблемами, пытаясь использовать большие объекты в 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-разрядной сборке вполне может быть достаточно свободной памяти, но не достаточно большого непрерывного блока адресного пространства, в которое ее можно отобразить.
Как я могу обойти это? Моя главная трудность заключается в том, что я достигаю определенной точки в моем сценарии, и R не может выделить 200-300 Мбайт для объекта ... Я не могу предварительно выделить блок, потому что мне нужна память для другой обработки. Это происходит даже тогда, когда я старательно удаляю ненужные объекты.
РЕДАКТИРОВАТЬ: Да, извините: 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
Calloc
и с Free
памятью, но я подозреваю, что это не то, что делает Бенджамин.