相比于網(wǎng)頁工具,使用編程語言處理科研數(shù)據(jù)的一大優(yōu)勢,在于高度的定制化趣席,以及批量處理數(shù)據(jù)的快捷性和高效性
對于批量處理數(shù)據(jù)的方法,之前使用for循環(huán)和apply語句進行處理過醇蝴,但是不夠系統(tǒng)宣肚,學(xué)習(xí)果子生信課程后有一個清晰的認識,寫下來悠栓,一是可以調(diào)用方便霉涨,二是自己寫過之后弧呐,才能算是完全掌握。當然一切以解決問題為主嵌纲,不陷于技術(shù)深究。
之前使用apply家族函數(shù)腥沽,只用過apply逮走,也就是對數(shù)據(jù)框的處理。學(xué)習(xí)了果子課程后今阳,發(fā)現(xiàn)lapply函數(shù)和do.call函數(shù)連用师溅,真是神器。
一個簡單的目錄
批量處理——for循環(huán)批量計算組間差異
數(shù)據(jù)準備
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, ...)這是其特點盾舌,前面是操作的內(nèi)容墓臭,后面是操作使用的函數(shù),函數(shù)使用后妖谴,返回列表窿锉,也就是list。所以要使用lapply函數(shù)膝舅,先要有操作函數(shù)嗡载,這個函數(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é)果是這個樣子
使用do.call轉(zhuǎn)換
前面得到的是列表仍稀,不便于后續(xù)的操作洼滚,要通過do.call 進行轉(zhuǎn)換
kruskal_data <- do.call(rbind, lapplylist)
結(jié)果就返回數(shù)據(jù)框,便于后續(xù)操作
整合成一步
# 整合成一個步驟
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值進行篩選
kruskal_data_p <- kruskal_data %>%
filter( `p.value` < 0.01 ) %>%
arrange(desc(p.value))
整個操作的代碼
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)
# 整合成一個步驟
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ù)篩選結(jié)果畫圖享幽,后續(xù)就使用批量的方法進行畫圖