メモリの制限に達しないように、プログラムを何度も書き直しました。それは再び完全な 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)
})
ブートストラップ関数は、単にデータをサンプリングし、サンプリングされたデータをディスクに保存します。
bootstrapper <- function(CleanDataObject){
newCPADataObject <- sample(CleanDataObject)
newCPADataObject$sha1 <- digest::sha1(newCPADataObject, algo="sha1")
saveRDS(newCPADataObject, paste(newCPADataObject$sha1 ,".rds", sep = "") )
return(newCPADataObject)
}
これがどのようにして 60 GB を超える RAM に蓄積されるのかわかりません。コードは非常に単純化されていますが、問題になる可能性のあるものは他にありません。必要に応じて、コードの詳細をさらに貼り付けることができます。
R
生成されたオブジェクトをディスクに保存するためにソフトウェアを書き直したにもかかわらず、どのようにして連続してメモリを消費するのでしょうか?