Мне было интересно, каким будет хороший способ вызвать событие, основанное на использовании памяти в R.Скажем, я объединяю кучу файлов в один мастер-файл, но размер всего мастер-файла может быть слишком большим для хранения в памяти.Когда я подхожу к пределу памяти, я хотел бы сохранить свой текущий мастер-файл и освободить память.
master <- NULL
partnum <- 1
threshold <- 0.8
filelist <- list.files(mypath)
for (filename in filelist)
{
filedata <- read.csv(filename)
if (is.null(master)) master <- filedata
else master <- rbind(master,filedata)
rm(filedata)
# test for memory usage here
# if (usedMemory > availableMemory * threshold)
# then do the following else go to top of loop
save(master,file=paste(mypath,partnum,"rData",sep="."))
master <- NULL
partnum <- partnum + 1
}
То, что я хотел бы сделать, - это рассчитать объем памяти, доступный на машине.Таким образом, событие будет запускаться динамически в зависимости от текущего использования компьютера.Скажем, когда сценарий запущен, на компьютере доступно 10 ГБ, поэтому выполняйте очистку при использовании 8 ГБ.Однако, скажем, в середине выполнения другой пользователь запускает программу, которая потребляет 5 ГБ, тогда я бы хотел очистить, когда используется 4 ГБ.
> x <- 1:10^9
> memory.size()
[1] 3832.26
> memory.limit()
[1] 16381
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 164953 8.9 350000 18.7 350000 18.7
Vcells 500150216 3815.9 669246830 5106.0 550150069 4197.4
На данный момент на моей машине у меня есть только 10 ГБ, доступные из-за других процессовпотребляет 2 ГБ