Я хочу сравнить время и память профиля, используемую несколькими функциями (регрессия со случайными эффектами и другой анализ), примененными к различным размерам набора данных.
Мой компьютер имеет 16 ГБ ОЗУ, и я хочу посмотреть, как R ведет себя с большими наборами данных и каков предел.
Для этого я использовал петлю и пакет bench .
После каждой итерации я очищаю память с помощью gc (reset = TRUE).
Но когда набор данных очень большой, сборщик мусора не работает должным образом, он просто освобождает часть памяти.
В конце все память остается заполненной, и мне нужно перезапустить сеанс R.
Мой полный набор данных называется allDT, и я делаю что-то вроде этого:
for (NN in (1:10)*100000) {
gc(reset=TRUE)
myDT <- allDT[sample(.N,NN)]
assign(paste0("time",NN), mark(
model1 = glmer(Out~var1+var2+var3+(1|City/ID),data=myDT),
model2 = glmer(Out~var1+var2+var3+(1|ID),data=myDT),
iterations = 1, check=F))
}
Таким образом, я могу получить результаты для каждого размера.
Метод несправедлив, потому что в конце память не очищается должным образом.
Я подумал, что альтернативой является перезапуск всей программы R после каждой итерации (выйдите из R и запустите ее снова, это единственный способ, который я нашел, вы можете очистить память), снова загрузив данные и продолжив с последнего шага.
Есть ли простой способ сделать это или альтернатива?
Может быть, мне нужно каждый раз сохранять результаты на диск, но будет сложно отследить последнюю выполненную строку, особенно если R зависает.
Мне может понадобиться создать внешний пакетный файл и запускать цикл, вызывая R на каждой итерации. Хотя я предпочитаю делать все из R без каких-либо внешних скриптов / пакетов.