Я переписывал свою программу много раз, чтобы не выходить за пределы памяти. Это снова требует полной VIRT, которая не имеет никакого смысла для меня. Я не сохраняю никаких объектов. Я записываю на диск каждый раз, когда выполняю вычисления.
Код (упрощенный) выглядит как
lapply(foNames, # these are just folder names like ["~/datastes/xyz","~/datastes/xyy"]
function(foName){
Filepath <- paste(foName,"somefile,rds",sep="")
CleanDataObject <- readRDS(Filepath) # reads the data
cl <- makeCluster(CONF$CORES2USE) # spins up a cluster (it does not matter if I use the cluster or not. The problem is intependent imho)
mclapply(c(1:noOfDataSets2Generate),function(x,CleanDataObject){
bootstrapper(CleanDataObject)
},CleanDataObject)
stopCluster(cl)
})
Функция bootstrap просто производит выборку данных и сохраняет выбранные данные в диск.
bootstrapper <- function(CleanDataObject){
newCPADataObject <- sample(CleanDataObject)
newCPADataObject$sha1 <- digest::sha1(newCPADataObject, algo="sha1")
saveRDS(newCPADataObject, paste(newCPADataObject$sha1 ,".rds", sep = "") )
return(newCPADataObject)
}
Я не понимаю, как это теперь может накопить более 60 ГБ оперативной памяти. Код сильно упрощен, но imho нет ничего более проблемного c. Я могу вставить больше деталей кода, если это необходимо.
Как R
удается успешно поглотить мою память, даже если я уже переписал программное обеспечение для хранения сгенерированного объекта на диске?