批量處理——apply批量計(jì)算組間差異

Rstudio

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

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

之前使用apply家族函數(shù),只用過apply,也就是對數(shù)據(jù)框的處理。學(xué)習(xí)了果子課程后,發(fā)現(xiàn)lapply函數(shù)和do.call函數(shù)連用,真是神器。

一個(gè)簡單的目錄
批量處理——for循環(huán)批量計(jì)算組間差異

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

rm(list = ls())

library(survminer)
data("myeloma")
head(myeloma)[1:3,1:11]

colnames(myeloma)

data = myeloma

還是使用R再帶數(shù)據(jù)集

構(gòu)建函數(shù)

先要了解lapply函數(shù)的使用方法
lapply(X, FUN, ...)這是其特點(diǎn),前面是操作的內(nèi)容,后面是操作使用的函數(shù),函數(shù)使用后,返回列表,也就是list。所以要使用lapply函數(shù),先要有操作函數(shù),這個(gè)函數(shù)可以是R自帶,也可以是自己寫的

# 第1,寫出單次處理的function
my.kruskal= function(x){
  dd <- kruskal.test(data[,x] ~ molecular_group, data = data)
  data.frame(gene=x,p.value=dd$p.value)
}

測試函數(shù)

> my.kruskal("CCND1")
   gene      p.value
1 CCND1 2.888423e-30

lapply函數(shù)批量操作

lapplylist <- lapply(colnames(data)[6:11], my.kruskal)

結(jié)果是這個(gè)樣子

lapply操作后的結(jié)果

使用do.call轉(zhuǎn)換

前面得到的是列表,不便于后續(xù)的操作,要通過do.call 進(jìn)行轉(zhuǎn)換

kruskal_data <- do.call(rbind, lapplylist)

結(jié)果就返回?cái)?shù)據(jù)框,便于后續(xù)操作

整合成一步

# 整合成一個(gè)步驟
kruskal_data <- do.call(rbind, lapply(colnames(data)[6:11], function(x){
  dd <- kruskal.test(data[,x] ~ molecular_group, data = data)
  data.frame(gene=x,p.value=dd$p.value)
}))

根據(jù)p值進(jìn)行篩選

kruskal_data_p <- kruskal_data %>% 
  filter( `p.value` < 0.01 ) %>% 
  arrange(desc(p.value))

整個(gè)操作的代碼

rm(list = ls())

library(survminer)
data("myeloma")
head(myeloma)[1:3,1:11]

colnames(myeloma)

data = myeloma

table(data$molecular_group)


# 第1,寫出單次處理的function
my.kruskal= function(x){
  dd <- kruskal.test(data[,x] ~ molecular_group, data = data)
  data.frame(gene=x,p.value=dd$p.value)
}
### 測試函數(shù)功能
my.kruskal("CCND1")

# 第2步lapply批量作用于函數(shù),返回list
lapplylist <- lapply(colnames(data)[6:11], my.kruskal)

# 第3步do.call 轉(zhuǎn)換list
kruskal_data <- do.call(rbind, lapplylist)

# 整合成一個(gè)步驟
kruskal_data <- do.call(rbind, lapply(colnames(data)[6:11], function(x){
  dd <- kruskal.test(data[,x] ~ molecular_group, data = data)
  data.frame(gene=x,p.value=dd$p.value)
}))


kruskal_data_p <- kruskal_data %>% 
  filter( `p.value` < 0.01 ) %>% 
  arrange(desc(p.value))

后記:有相關(guān)的統(tǒng)計(jì)量,進(jìn)行篩選后,最好能夠根據(jù)篩選結(jié)果畫圖,后續(xù)就使用批量的方法進(jìn)行畫圖

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

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

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