Подтвердить что ты не робот

Эффективное управление памятью в R

У меня 6 ГБ памяти на моей машине (Windows 7 Pro 64 бит), а в R я получаю

> memory.limit()
6141

Конечно, при работе с большими данными возникает ошибка выделения памяти. Поэтому, чтобы заставить R использовать виртуальную память, я использую

> memory.limit(50000)

Теперь при запуске my script у меня больше нет ошибки выделения памяти, но R запускает всю память на моем компьютере, поэтому я не могу использовать машину до завершения script. Интересно, есть ли лучший способ заставить R управлять памятью машины. Я думаю, что что-то, что он может сделать, это использовать виртуальную память, если она использует физическую память больше, чем указано пользователем. Есть ли такой способ?

4b9b3361

Ответ 1

Посмотрите на пакеты ff и bigmemory. Это использует функции, которые знают о объектах R, чтобы держать их на диске, а не позволять ОС (которая просто знает о кусках памяти, но не то, что они представляют).

Ответ 2

R не управляет памятью машины. Это ответственность операционной системы. Единственная причина memory.size и memory.limit существует в Windows, потому что (от help("Memory-limits")):

 Under Windows, R imposes limits on the total memory allocation
 available to a single session as the OS provides no way to do so:
 see 'memory.size' and 'memory.limit'.

Объекты R также должны занимать непрерывное пространство в ОЗУ, поэтому вы можете запускать проблемы с распределением памяти только с несколькими большими объектами. Вероятно, вы можете быть более осторожны с количеством/размером создаваемых объектов и избегать использования большого количества памяти.

Ответ 3

Это не решение, а предложение. По возможности используйте эффективные объекты памяти: например, используйте матрицу вместо data.frame.

Здесь пример

m = matrix(rnorm(1000), 2, 2)
d = as.data.frame(m)
object.size(m)
232 bytes
object.size(d)
808 bytes