在R中嵌套foreach%dopar%

时间:2019-01-29 19:56:55

标签: r foreach

因此,我已经使用一个循环成功地在R中使用了每个%dopar%(例如“ i”)。现在,我正在尝试使用两个循环(例如“ i”和“ j”)进行foreach。

我需要在两个大型数据框之间进行相关性分析。 DF1具有22个特征和280个样本(值“ i”遍历该DF的行)。 DF2具有大约20,000个特征和相同的280个样本(值“ j”遍历该DF的行)

从调试中,我了解到的是,我编写的这段代码仅在i和j具有相同值的循环中运行。即,对于1和j = 1,2,..... 22。

对于其他j值,循环未运行。有人可以帮我弄清楚如何编辑代码以使其适用于所有“ i”和“ j”值吗?非常感谢你!

我的代码如下。

corrResult1<-foreach(i=1:nrow(DF1),j=1:nrow(DF2),.combine=rbind) %dopar% {
oneValueDF1 = as.numeric(DF1[i,])
oneValueDF2 = as.numeric(DF2[j,])
myCor1 = cor(x = oneValueDF1, y = oneValueDF2 , method = "pearson")
    #correlation test
myCor1_test = cor.test(oneValueDF2, oneValueDF1, method="pearson") 

tempMatrix = cbind(oneValueDF1, oneValueDF2,
                       myCor1_test$statistic, # T stat
                       myCor1_test$parameter, #DF
                       myCor1_test$p.value, #p alue
                       myCor1_test$estimate, #corr coeff
                       myCor1_test$conf.int[1], #conf int 1
                       myCor1_test$conf.int[2], #conf int 2
                       myCor1_test$null.value, 
                       myCor1_test$alternative,
                       myCor1_test$method) 

    tempMatrix 

}

1 个答案:

答案 0 :(得分:0)

这有效。如果它对任何人都有用:

corrResult1<-foreach(i=1:nrow(DF1),.combine=rbind) %:% 
             foreach(j=1:nrow(DF2),.combine=rbind) %dopar% { 

oneValueDF1 = as.numeric(DF1[i,])
oneValueDF2 = as.numeric(DF2[j,])
myCor1 = cor(x = oneValueDF1, y = oneValueDF2 , method = "pearson")
#correlation test
myCor1_test = cor.test(oneValueDF2, oneValueDF1, method="pearson") 

tempMatrix = cbind(oneValueDF1, oneValueDF2,
                   myCor1_test$statistic, # T stat
                   myCor1_test$parameter, #DF
                   myCor1_test$p.value, #p alue
                   myCor1_test$estimate, #corr coeff
                   myCor1_test$conf.int[1], #conf int 1
                   myCor1_test$conf.int[2], #conf int 2
                   myCor1_test$null.value, 
                   myCor1_test$alternative,
                   myCor1_test$method) 

    tempMatrix 

         }