【发布时间】:2020-07-08 09:17:18
【问题描述】:
我有 14000 个基因(列:Gene)和 200 个样本(列:sample1 sample2 ...)
我正在尝试计算 ~14000 个基因的相关性,并将数据集 (test_df) 中的所有基因相关性和所需列附加到新数据框 (df1) 中,并将结果写入文本文件。
当我运行代码时,我得到了(Gene1 和 Gene2)和(Gene1 和 Gene3)之间的相关性。当循环到达 Gene2 时它会中断并且错误提示
cor.test.default(as.matrix(test_df[i, ][, 3:length(test_df)]) 中的错误: 没有足够的有限观察
我每行有 3 到 4 个值,这不应该是这种情况。
请建议任何有效的方法,因为我必须对 14000 个基因进行关联。如何在多个内核上运行此代码以更快地获得结果?
请在下面找到代码和生成的文件。
提前致谢
> test_df <- data.frame(ID=c("ID_3721", "ID_537", "ID_555"),
Gene=c("Gene1","Gene2","Gene3"),
sample1=c(11397,78191,44838),
sample2=c(33768,33763,7680),
sample3=c(74521,33268,72367),
sample4=c(51486,11435,28772),
sample5=c(73539,21486,0))
> test_df
## ID Gene sample1 sample2 sample3 sample4 sample5
##1 ID_3721 Gene1 11397 33768 74521 51486 73539
##2 ID_537 Gene2 78191 33763 33268 11435 21486
##3 ID_555 Gene3 44838 7680 72367 28772 0
for(i in 1:2){
for(j in i+1:3){
p.cor <- cor.test(as.matrix(test_df[i,][,3:length(test_df)]), as.matrix(test_df[j,][,3:length(test_df)]), method="pearson")$estimate
s.cor <- cor.test(as.matrix(test_df[i,][,3:length(test_df)]), as.matrix(test_df[j,][,3:length(test_df)]), method="spearman")$estimate
df1 <- data.frame(ID1 = test_df[i,1],
ID2 = test_df[j,1],
Name1 = test_df[i,2],
Name2 = test_df[j,2],
correlation.p = p.cor
correlation.s = s.cor)
write.table(df1, file="genecorr.txt", row.names=FALSE, sep="\t", append=TRUE, quote=FALSE, col.names = !file.exists("genecorr.txt"))
}
}
**Error in cor.test.default(as.matrix(test_df[i, ][, 3:length(test_df)]), :
not enough finite observations**
genecorr.txt
ID1 ID2 NAME1 NAME2 correlation.p correlation.s
ID_3721 ID_537 Gene1 Gene2 -0.136733508500744 -0.1
ID_3721 ID_555 Gene1 Gene3 0.145998550191942 0.3
【问题讨论】:
-
如果您只对估算感兴趣,则不需要
cor.test。cor可能就足够了,而且可能更快 -
您在每次迭代时都保存了genecorr.txt。这可能会大大延长计算时间。我建议在计算相关性后保存。
标签: r