解释这段代码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 13:28:37 浏览: 127
correlation.rar_correlation dimensi_correlation function_嵌入维数
这段代码定义了一个名为`cal_correlation`的函数。这个函数用于计算两个数据集之间的相关性,并返回相关性大于给定阈值的结果。
如果`interaction_tab`数据集的列数为2,函数将使用并行计算来计算每一行两个数据集之间的相关性。具体步骤如下:
1. `makeCluster(parallel::detectCores() - 1)`:创建一个并行计算的集群,使用的核心数为可用核心数减去1。
2. `clusterEvalQ(cl,library(ggm))` 和 `clusterEvalQ(cl,library(corpcor))`:在并行计算的集群中加载`ggm`和`corpcor`库。
3. `clusterExport(cl,c("ex1","ex2","interaction_tab"),envir=environment())`:将`ex1`、`ex2`和`interaction_tab`导出到并行计算的环境中。
4. `parSapply(cl, 1:nrow(interaction_tab), function(i) {...})`:对`1:nrow(interaction_tab)`进行并行计算,其中每个迭代`i`表示一行数据。
5. 在每个迭代中,首先从`ex1`和`ex2`中获取相应的行数据,然后使用`cor()`函数计算这两个数据集之间的皮尔逊相关系数。
6. 将相关系数存储在变量`xcor`中,并返回该值。
7. 结束并行计算的集群。
8.
阅读全文