基因之间相关系数的批量计算(基于R)

在影像组学研究中,有时我们需要了解各特征之间的相关系数,如何批量计算呢?网上看到一个帖子,帖子里以基因为例子,批量计算基因之间的相关系数,很有借鉴意义。

# 先产生一个矩阵
data<-matrix(rnorm(120),nrow=20,ncol = 6)
## 模仿一个矩阵数据
rownames(data)<-paste("gene",1:20,sep = "")
colnames(data)<-paste("sample",1:6,sep ="" )
head(data)
Fig1.jpg
#首先明确实现这个目的可以使用for循环 
#构建好需要得出的结果表,包括基因名,相关系数,Pvalue

#创建空向量
gene_name1<-c()
gene_name2<-c()
cor_r<-c()
pvalue<-c()

# 准备好循环体-可使用嵌套的for循环,完成完整的计算但不重复
# 注意第二个for循环的值为 i: nrow(data),这一点很巧妙

for (i in 1:nrow(data)){
  for (r in i:nrow(data)){
    g1=rownames(data)[i]
    g2=rownames(data)[r]
    c_r=cor(as.numeric(data[i,]),as.numeric(data[r,]),method="pearson")
    p=cor.test(as.numeric(data[i,]),as.numeric(data[r,]),method ="pearson")[[3]]
    ##保存每一步的数据,而不可直接以空向量作为每一步运行的结果
    gene_name1=c(gene_name1,g1)
    gene_name2=c(gene_name2,g2)
    cor_r=c(cor_r,c_r)
    pvalue=c(pvalue,p)
       }
}

###输出为数据框,导出结果
data_cor<-data.frame(gene_name1,gene_name2,cor_r,pvalue)
head(data_cor)

dim(data_cor)
# [1] 210   4
Fig2.jpg

参考资料:
for循环的理解与应用

你可能感兴趣的:(基因之间相关系数的批量计算(基于R))