# 先产生一个矩阵
data<-matrix(rnorm(120),nrow=20,ncol = 6)
##模仿一个矩阵数据
rownames(data)<-paste("gene",1:20,sep = "")
colnames(data)<-paste("sample",1:6,sep ="" )
head(data)
## sample1 sample2 sample3 sample4 sample5 sample6
## gene1 0.4990478 -0.3660286 -1.67747446 1.2152064 0.36704041 0.4426596
## gene2 0.4137370 -0.5759078 -1.05686047 2.3791852 0.16012042 0.1116411
## gene3 -1.3810102 -2.2091688 -0.04397986 1.1043156 -0.02498766 0.2022606
## gene4 -0.5869116 -1.4709767 -1.00648437 -0.3828667 -1.31701773 0.4458708
## gene5 -1.9125251 -0.3051966 1.61747167 -0.8524583 -0.28413794 -1.3215508
## gene6 0.6544889 -0.5892970 -0.32164520 -0.2571762 0.24715474 -0.3288907
###首先明确实现这个目的可以使用for循环 ### 构建好需要得出的结果表,包括基因名,相关系数,Pvalue
###首先创建空向量
gene_name1<-c()
gene_name2<-c()
cor_r<-c()
pvalue<-c()
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)
## gene_name1 gene_name2 cor_r pvalue
## 1 gene1 gene1 1.0000000 0.00000000
## 2 gene1 gene2 0.8621872 0.02717984
## 3 gene1 gene3 0.3032010 0.55913529
## 4 gene1 gene4 0.4343741 0.38941794
## 5 gene1 gene5 -0.8329406 0.03953206
## 6 gene1 gene6 0.3329173 0.51907333
dim(data_cor)
## [1] 210 4