【发布时间】:2018-05-18 02:41:12
【问题描述】:
所以当我必须处理大量元素以更快地计算它时,我使用 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-bit (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
提前感谢大家的帮助。 问候,
【问题讨论】:
-
如果您向reproducible example 提供示例输入数据和我们可以复制/粘贴以运行的代码,则更容易为您提供帮助。目前尚不清楚您正在尝试什么或错误/问题到底是什么。
-
您可以生成 2 个随机数值矩阵(我的意思是像 1.2、2.5、...这样的点)唯一“特殊”的是两个矩阵具有相同的行数,并且只有4列(所以每行4个值)我目前无法轻松复制我的矩阵对不起......我正在做的是逐行迭代,比较2个矩阵A和B的值。示例:第1行:var.test( matrixA[1,],matrixB[1,])$p.value 第 2 行: var.test(matrixA[2,],matrixB[2,])$p.value [...] 我只保留 p - 每个结果的值将其添加到我的 p.values.res 列表中。
标签: r foreach parallel-processing doparallel statistical-test