Я стикаюся з проблемами, які намагаються використовувати великі об'єкти в Р. Наприклад:
> 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 Мб для об'єкта ... Я не можу реально попередньо виділити блок, тому що мені потрібна пам'ять для іншої обробки. Це трапляється навіть тоді, коли я старанно видаляю зайві предмети.
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
Calloc
та Free
пам'ять, але я підозрюю, що це не те, що робить Бенджамін.