embed函數 R語言 多組樣本的N種組合
對於單個基因在多個樣本組中的差異表達,通常使用方差分析,即,將多個組比較在壹起以獲得P值。如果p值顯著,說明多組基因表達有顯著差異。然而,我們不能知道兩組之間或兩組之間的基因表達是否有顯著性差異,因此我們需要細化分組,此時,我們需要使用排列和組合!
在R語言中,可以使用 combn() 函數從壹個向量中獲得所有可能的元素組合:
(All combinations of X elements of M are generated at one time).
例如,我們現在有4種Stage分期,現在要得到所有可能的兩兩組合,以進行差異表達分析:
labels = c(?I?, ?II?, ?III?, ?IV?)
res = t(combn(labels, 2))
res
[,1] [,2]
[1,] ?I II?
[2,] ?I III?
[3,] ?I IV?
[4,] ?II III?
[5,] ?II IV?
[6,] ?III IV?
可見,兩兩壹組***有6種可能,需要在每種可能的組合內進行兩組間差異表分析!如果此時妳已經寫好了壹個名為 limma_dea() 的差異表達分析函數,則可以很方便的在 combn 內部調用該函數:
combn(labels, 2, FUN = limma_dea)
如果只想取某位與其相鄰下壹位的組合:
p_load(gtools)
index = combinations(length(labels), 2) # 返回的是下標
res[index[,2] == index[,1]+1,] # 基於滿足條件的下標取原數據子集
[,1] [,2]
[1,] ?I II?
[2,] ?II III?
[3,] ?III IV?
不過,有更加簡單的實現方式, embed 函數:
Results each row of the matrix consists of sequences x [t] and x [t-1]...,
X [t-dimension + 1],
where t is the original index
of X.
comps = embed(labels,2)[,2:1]
但是,由於 embed 沒有調用函數的接口,所以可以使用 lapply 函數:
my_comparisons = lapply(1:nrow(comps), function(x) comps[x,])
lapply(my_comparisons, limma_dea)
# 或者
lapply(split(comps, 1:nrow(comps)), limma_dea)