批量處理——基因之間的相關(guān)性

R

相比于網(wǎng)頁工具,使用編程語言處理科研數(shù)據(jù)的一大優(yōu)勢,在于高度的定制化,以及批量處理數(shù)據(jù)的快捷性和高效性

目錄
批量處理——for循環(huán)批量計(jì)算組間差異
批量處理——apply批量計(jì)算組間差異
批量處理——for循環(huán)畫圖
批量處理——for循環(huán)遷移文件

對于批量處理數(shù)據(jù)的方法,之前使用for循環(huán)和apply語句進(jìn)行處理過,但是不夠系統(tǒng),學(xué)習(xí)果子生信課程后有一個清晰的認(rèn)識,寫下來,一是可以調(diào)用方便,二是自己寫過之后,才能算是完全掌握。當(dāng)然一切以解決問題為主,不陷于技術(shù)深究。

批量計(jì)算基因和基因之間的相關(guān)性,也是一項(xiàng)很好的應(yīng)用。

場景

計(jì)算RNA-seq得到的基因與DDR1基因相關(guān)系數(shù),并挑選出顯著相關(guān)基因(p < 0.05)

數(shù)據(jù)準(zhǔn)備

得到的數(shù)據(jù)是TCGA結(jié)直腸癌的數(shù)據(jù)



為上圖的清潔數(shù)據(jù)

for循環(huán)計(jì)算

首先要明確單次操作的情況

cor_data <- data.frame()

yourgene <- 'DDR1'

genelist <-  setdiff(colnames(COAD_data),c("sample","TCGA_id","type","subtype",yourgene))


dd <- cor.test(COAD_data[,yourgene], COAD_data[,genelist[1]], method = 'spearman')
dd$statistic
dd$p.value
cor_data[genelist[1],1] = dd$statistic
cor_data[genelist[1],2] = dd$p.value
colnames(cor_data) = c('statistic', 'p.value')

批量處理時,針對for循環(huán)就是提前做好一個容器,然后把變量替換成一般表達(dá)

cor_data <- data.frame()

yourgene <- 'DDR1'

genelist <-  setdiff(colnames(COAD_data),c("sample","TCGA_id","type","subtype",yourgene))

system.time(
  for (gene in genelist) {
  dd <- cor.test(COAD_data[,yourgene], COAD_data[,gene], method = 'spearman')
  statistic = dd$statistic
  p.value = dd$p.value
  cor_data[gene,1] = statistic
  cor_data[gene,2] = p.value 
}
)
# 用戶  系統(tǒng)  流逝 
# 34.62  0.66 36.62 

colnames(cor_data) = c('statistic', 'p.value')

lapply計(jì)算

yourgene <- 'DDR1'
genelist <-  setdiff(colnames(COAD_data),c("sample","TCGA_id","type","subtype",yourgene))

# 寫一個函數(shù)
mycor <- function(x){
  dd = cor.test(COAD_data[,yourgene], COAD_data[,x], method = 'spearman')
  data.frame(gene1 = yourgene, gene2 = x, R = dd$estimate, p.value = dd$p.value)
}

# 測試一下
mycor(genelist[1])

# 批量
lapplylist <- lapply(genelist, mycor)

# do.call
cor_data <- do.call(rbind, lapplylist)

# 整理成一個函數(shù)
cor_data <- do.call(rbind, lapply(genelist, function(x){
  dd = cor.test(COAD_data[,yourgene], COAD_data[,x], method = 'spearman')
  data.frame(gene1 = yourgene, gene2 = x, R = dd$estimate, p.value = dd$p.value)
}))

再測試一下時間

system.time(
  cor_data <- do.call(rbind, lapply(genelist, function(x){
    dd = cor.test(COAD_data[,yourgene], COAD_data[,x], method = 'spearman')
    data.frame(gene1 = yourgene, gene2 = x, R = dd$estimate, p.value = dd$p.value)
  }))
)

# 用戶  系統(tǒng)  流逝 
# 31.29  0.25 32.15 

結(jié)果


兩種計(jì)算方法的得到結(jié)果是一致的

關(guān)于篩選和排序

那就只是filter函數(shù)和arrange函數(shù)的操作,可參閱R for Data Science(筆記) ---數(shù)據(jù)變換(filter使用) ,R for Data Science(筆記) ---數(shù)據(jù)變換(行排序)操作。

后記:本篇是寫了如何批量求與某一個基因的基因的相關(guān)系數(shù)。后續(xù)設(shè)計(jì)兩個基因在不同腫瘤的相關(guān)性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容