Мне нужно удалить глобальную переменную и освободить память, которую она использовала, внутри функции с R, но ни одна из опций, которые я пробовал, не работает.
Я пробовал функцию rm с параметром envir, а затем gc, но gc не освобождает память. Я также попытался запустить gc в глобальной среде с помощью eval + envir.
library(data.table)
DT = data.table(col1 = 1:1e6)
cols = paste0('col', 2:100)
for (col in cols){ DT[, col := 1:1e6, with = F] }
rm_and_release <- function(dt){
dt <- dt[sample(1e6, 9e5, FALSE)]
print(gc())
rm(DT, envir = globalenv())
print(gc())
}
rm_and_release(DT)
Результат следующий
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 661556 35.4 1168576 62.5 1143443 61.1
Vcells 96303112 734.8 146725516 1119.5 146722586 1119.5
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 661569 35.4 1168576 62.5 1143443 61.1
Vcells 96303114 734.8 146725516 1119.5 146722586 1119.5
Я ожидал, что второй gc () освободит больше памяти, так как в этот момент есть только один набор данных, потому что глобальный DT был удален.
Мне нужно освободить ОЗУ внутри функции, потому что функция генерирует больше наборов данных, и ей не хватает памяти.