我在具有 16GB RAM 和超线程四核的 MacMini 上使用 rfImpute 时遇到了同样的问题。对于您的日常数据分析问题,没有什么是它无法处理的。问题是 rfImpute 通过生成邻近矩阵来工作。邻近矩阵为 N x N,这对于您的应用程序意味着 rfImpute 创建一个具有 13300^2 个条目的背景对象。就我而言,它是 93000^2。
您可以做的一件事是将数据分成 K 个不同的段并将 rfImpute 应用于每个切片,然后手动重新组合:
slices <- 8
idx <- rep(1:slices, each = ceiling(nrow(X)/slices))
idx <- idx[1:nrow(X)]
imputedData <- do.call('rbind', lapply(1:slices, function(SLICE){
print(SLICE)
require(randomForest)
rfImpute(X[idx == slice, ], Y[idx == slice])
}))
您可以使用 parLapply 将其并行化,如下所示:
slices <- 8
idx <- rep(1:slices, each = ceiling(nrow(X)/slices))
idx <- idx[1:nrow(X)]
cl <- makeCluster(8)
clusterExport(cl, c('idx', 'slices', 'X', 'Y'))
imputedData <- do.call('rbind', parLapply(cl, 1:slices, function(SLICE){
require(randomForest)
rfImpute(X[idx == SLICE, ], Y[idx == SLICE])
}))
stopCluster(cl)