解释这段代码cal_correlation<-function(interaction_tab,ex1,ex2,filter){ cat('calculating correlation\n') if (ncol(interaction_tab)==2){ cl = makeCluster(parallel::detectCores() - 1) clusterEvalQ(cl,library(ggm)) clusterEvalQ(cl,library(corpcor)) clusterExport(cl,c("ex1","ex2","interaction_tab"),envir=environment()) corr <- parSapply( cl, 1:nrow(interaction_tab), #whole number of combinations function(i) { xcor=cor(t(ex1[interaction_tab[i,1],]),t(ex2[interaction_tab[i,2],]), method = "pearson") return(xcor) } ) stopCluster(cl) res<-cbind(interaction_tab,corr) res<-res[abs(res[,3])>filter,] return(res) }else if (ncol(interaction_tab)==3){#abandoned cl = makeCluster(parallel::detectCores() - 1) clusterEvalQ(cl,library(ggm)) clusterEvalQ(cl,library(corpcor)) clusterExport(cl,c("ex1","ex2","interaction_tab"),envir=environment()) mydata1 <- parSapply( cl, 1:nrow(interaction_tab), #whole number of combinations function(i) { cox_all=matrix(nrow = 3, ncol = 1) ce1_1= as.character(interaction_tab[i,1]) ce2_1= as.character(interaction_tab[i,2]) miRNA1= as.character(interaction_tab[i,3]) s1<-cbind(t(ex2[ce1_1,]), t(ex2[ce2_1,]), t(ex1[miRNA1,])) xcor=cor(s1,method = "pearson") cox_all[1,1]=xcor[2,1] cox_all[2,1]=xcor[3,1] cox_all[3,1]=xcor[3,2] return(cox_all) } ) stopCluster(cl) scc<-data.frame(mydata1) scc<-t(scc) res<-cbind(interaction_tab,scc) colnames(res)<-c('x','y','miRNA','x_y','mi_x','mi_y') #post process of corr res<-res[res$x_y>filter,]#select triplets with |pcc|>filter res<-res[abs(res$mi_x)>filter & abs(res$mi_y)>filter & (res$mi_y)*(res$mi_x)>0,] return(res) } }
时间: 2024-04-19 10:28:41 浏览: 93
这段代码定义了一个名为`cal_correlation`的函数,它用于计算两个变量之间的相关性。函数的输入参数包括`interaction_tab`、`ex1`、`ex2`和`filter`。
- `interaction_tab`是一个数据框,包含了要计算相关性的变量的组合。如果`interaction_tab`的列数为2,则说明计算的是两个变量之间的相关性;如果列数为3,则说明计算的是三个变量之间的相关性(但这部分已经被注释掉,不再使用)。
- `ex1`和`ex2`是两个矩阵,分别表示与`interaction_tab`中的变量相对应的数据。
- `filter`是一个阈值,用于筛选相关性结果。
代码首先输出一段提示信息"calculating correlation"。然后,它判断`interaction_tab`的列数,如果为2,则使用并行计算的方式来计算两个变量之间的相关性。
在并行计算之前,代码创建了一个并行化的集群(cluster),并引入了`ggm`和`corpcor`这两个包。然后,将需要使用的变量和数据导出到集群中。
接下来,代码使用`parSapply`函数在集群中对每一行的组合进行计算。对于每一行,它从`ex1`和`ex2`中取出相应的数据,并使用`cor`函数计算这两个变量之间的相关性(使用的方法是Pearson相关系数)。最后,将计算得到的相关性值与组合信息合并,并筛选出绝对值大于`filter`的结果。
如果`interaction_tab`的列数为3,则使用类似的方式进行计算,但这部分代码已经被注释掉,不再使用。
最后,函数返回计算结果`res`,它是一个数据框,包含了组合信息和相关性值。对于两个变量之间的相关性计算,`res`有三列;对于三个变量之间的相关性计算(注释掉的部分),`res`有六列,并且对相关性结果进行了一些后处理(筛选出满足条件的结果)。
注意:这段代码中使用了并行计算技术(使用了`makeCluster`和`parSapply`函数),这些函数需要依赖于`parallel`包。
阅读全文