我的B对象是一个大矩阵100 000 * 5000的2 GB
我的A对象小1000 * 5000
analyse_with_glm <- function(Y) {
cond1 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X)))[,4][2]))
cond2 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X+cov2)))[,4][2]))
cond3 = unlist(apply(B, 2, function(X) coef(summary(glm(Y~X+cov3)))[,4][2]))
list(cond1, cond2, cond3)}
cl = makeCluster(nb_cpu, type = "FORK", outfile='outcluster.log')
res = parApply(cl, A, 2, analyse_with_glm)
最初我使用2.1GB的mermoy进行单一的rsession过程 在调用parApply函数后,我有4.5GB的nb_cpu线程。
我使用&#39; top&#39;用于监视线程和内存使用情况的命令,这不是垃圾收集器可以释放的表面用法。线程因内存不足而崩溃。它运行在128GB内存计算机上,有30个线程(我的代码中nb_cpu = 30)。
NB:我也尝试过相反,在parApply中使用B(大矩阵)代替A,但它没有解决问题。
答案 0 :(得分:1)
这个答案可能是部分的,因为我仍然认为在行为代码并行化时R行为很奇怪。 如果你从 RStudio 运行代码,并行线程往往会被〜/ .rstudio / suspended-session-data /
的大小夸大 所以要避免它,这是一个虚拟的解决方法。
1.清洁环境
2.注销
3.登录
4.加载您的数据
5.运行并行代码
<强>信息:强>