因此,当我必须处理大量元素以更快地计算它时,我正在使用 R 包 doParallel 来并行化我的脚本的一些步骤。因为这一次,到目前为止我使用的所有函数都与 foreach() 完美配合:我只需要使用 registerDoParallel() 指定我的核心数量,仅此而已!
我最近尝试使用 var.test() 和 t.test() 在 R 中使用不同的统计测试,但我不明白为什么,但我意识到在 foreach() 中使用它不起作用......所以要更多清楚我基本上在做的是迭代相同维度的 2 个矩阵的行:每个矩阵中的每一行包含 5 个数值,例如:
var.test(matrixA[1,],matrixB[1,])$p.value
对于第 1 行,从对 10 个数值(每个矩阵的第 1 行中的 2 组 5 个值)进行的 Fisher 检验中提取相应的 p.value。问题是我的矩阵有数百万行,所以我必须遍历行数,我用 foreach() 函数来做到这一点:
p.values.res<-foreach(i=seq(dim(matrixA)[1])) %dopar%
var.test(matrixA[i,],matrixB[i,])$p.value
(这里我在 foreach() 之前设置了 registerDoParallel(cores = 6))。我尝试了不同的测试:fisher 测试和学生测试 (t.test()),不幸的是,它们都没有在我的 6 个内核上工作,只有一个。
我也尝试了“cl”: registerDoParallel(cl = 4) 它也不起作用。
我试图重新启动 R,退出并重新打开会话,重新启动计算机:不起作用。
有谁知道为什么它不起作用,以及如何解决这个问题?
我的配置:Linux Mint 18.2 Cinnamon 64 位(3.4.6);英特尔酷睿 I7-6700 CPU;R 版本 3.4.3 (2017-11-30); RStudio 版本 1.1.383 2009-2017。
这里有 2 个简短的矩阵示例
矩阵A:
0.7111111 0.7719298 0.7027027 0.6875000 0.6857143
0.8292683 0.6904762 0.8222222 0.8333333 0.6250000
0.8846154 0.5714286 0.8928571 0.8846154 0.9259259
0.9000000 0.5000000 0.9500000 0.8666667 0.8260870
0.8235294 0.3684211 0.9411765 0.8333333 0.8000000
0.5714286 0.2142857 0.6666667 0.5000000 0.5555556
矩阵B:
0.5227273 0.7142857 0.7808219 0.6346154 0.7362637
0.9166667 0.7173913 0.8611111 0.7391304 0.7538462
0.8666667 0.6052632 0.8260870 0.7333333 0.9024390
0.9285714 0.5806452 0.8750000 0.6956522 0.8787879
0.8333333 0.5517241 0.8333333 0.6818182 0.8750000
0.7500000 0.2941176 0.6666667 0.4444444 0.7500000
预先感谢大家的帮助。问候,