Вы можете получить ссылку на любую из открытых форм приложения, используя свойство Application.OpenForms
. Forms
в этом FormCollection
можно получить по индексу следующим образом:
Form form1 = Application.OpenForms[0];
или по свойству формы Name
, например:
Form form1 = Application.OpenForms["Form1"];
Надеюсь, что это поможет .
Подумайте, действительно ли вам нужны все эти данные в явном виде или может быть разрешена матрица? В R есть хорошая поддержка (см. Пакет Matrix
для, например,) для разреженных матриц.
Сохраняйте все остальные процессы и объекты в R до минимума, когда вам нужно создавать объекты такого размера. Используйте gc()
, чтобы очистить неиспользуемую память, или, лучше создать только тот объект, который вам нужен за один сеанс .
Если приведенное выше не поможет, получите 64-разрядную машину с таким количеством оперативной памяти, какую вы можете себе позволить, и установите 64-разрядную R.
Если вы не можете этого сделать, онлайн-сервисы для удаленных вычислений.
Если вы не можете сделать это, инструменты для сопоставления памяти, такие как пакет ff
(или bigmemory
, как упоминается Sascha), помогут вам построить новое решение. В моем ограниченном опыте ff
- это более сложный пакет, но вы должны прочитать тему High Performance Computing
в представлении задач CRAN.
Если вы запускаете свой скрипт в среде linux, вы можете использовать эту команду:
bsub -q server_name -R "rusage[mem=requested_memory]" "Rscript script_name.R"
, и сервер будет выделять запрошенную вам память (в соответствии с лимитами сервера, но с хорошим сервером - можно использовать огромные файлы)
server_name
? Я сталкиваюсь с этим cannot allocate vector size...
, пытаясь сделать огромную матрицу Document Term в AMI, и я не могу понять, почему у нее недостаточно памяти или сколько еще мне нужно арендовать. Спасибо!
– seth127
15 March 2016 в 03:06
Самый простой способ обойти это ограничение - переключиться на 64 бит R.
Error: cannot allocate vector of size ... Gb
(но да, у меня много данных).
– om-nom-nom
11 April 2012 в 18:20
Я столкнулся с подобной проблемой, и я использовал 2 флеш-накопителя как «ReadyBoost». Эти два диска обеспечили дополнительную память объемом 8 ГБ (для кеша), и она решила проблему, а также увеличила скорость всей системы в целом. Чтобы использовать Readyboost, щелкните правой кнопкой мыши на диске, перейдите к свойствам и выберите «ReadyBoost» и выберите переключатель «использовать это устройство» и нажмите «Применить» или «ОК» для настройки.
Вот презентация на эту тему, которая может показаться интересной:
http://www.bytemining.com/2010/08/taking-r-to-the-limit- part-ii-large-datasets-in-r /
Я сам не пробовал обсуждаемые вещи, но пакет bigmemory
кажется очень полезным
Метод сохранения / загрузки, упомянутый выше, работает для меня. Я не уверен, как / if gc()
дефрагментирует память, но это, похоже, работает.
# defrag memory
save.image(file="temp.RData")
rm(list=ls())
load(file="temp.RData")
Для пользователей Windows следующее помогло мне понять некоторые ограничения памяти:
gc()
для сбора мусора => она работает, я вижу, что использование памяти сокращается до 2 ГБ [/g1]
Дополнительные советы, которые работают на моей машине:
gc()
- просто иллюзия. Проверка диспетчера задач - это просто базовые операции с окнами. Единственный совет, с которым я могу согласиться, заключается в сохранении формата .RData
– David Arenburg
15 July 2014 в 11:23
gc()
не работает. Я просто хочу сказать, что R делает это автоматически, поэтому вам не нужно делать это вручную. См. здесь
– David Arenburg
15 July 2014 в 13:09
gc()
Работает . Вам просто не нужно использовать его, потому что R делает это внутренне
– David Arenburg
15 July 2014 в 13:22