WGCNA之labels2colors()

介紹

WGCNA官網(wǎng)教程第一部分的第二個腳本FemaleLiver-02-networkConstr-auto.R 中用到的labels2colors函數(shù)解讀

表達式:moduleColors = labels2colors(net$colors)

后面的腳本中 moduleColors 被視為與基因順序相同惯退,

目的是為了看moduleColorsnet$colors 的順序是否一一對應(yīng)铣口。

net$colors 簡介

> net$colors %>% head(20)
MMT00000044 MMT00000046 MMT00000051 MMT00000076 MMT00000080 
          0           1           1          17           4 
MMT00000102 MMT00000149 MMT00000159 MMT00000207 MMT00000212 
         12           5           6           7           1 
MMT00000231 MMT00000241 MMT00000268 MMT00000283 MMT00000334 
          1           4           4           5           1 
MMT00000365 MMT00000368 MMT00000373 MMT00000384 MMT00000401 
          4           4           2           2           2 

函數(shù)式與解讀

根據(jù)moduleColors=labels2colors(net$colors) 表達式進行解析适瓦。

> labels2colors
function (labels, zeroIsGrey = TRUE, colorSeq = NULL, naColor = "grey", 
    commonColorCode = TRUE) 
{
    # 1 if
    if (is.null(colorSeq)) #真郎逃,未定義該值
        colorSeq = standardColors() #執(zhí)行,standardColors()為WGCNA定義的顏色函數(shù)册招,默認返回一個值為435個顏色的向量搀突。
    
    # 2 if
    if (is.numeric(labels)) { #真,labels為數(shù)值
        # 2.1 if
        if (zeroIsGrey) #真根时,默認
            minLabel = 0 #執(zhí)行,獲取值辰晕,minLabel = 0
        else minLabel = 1
        
        # 2.2 if
        if (any(labels < 0, na.rm = TRUE)) #假蛤迎。 
            minLabel = min(c(labels), na.rm = TRUE) # 上面if 省略了{},是單行表達式!I∏邸!坑2跄取3稀!
        nLabels = labels #執(zhí)行召川,注意這句與2.1 if和 2.2 if并列南缓。該句在2 if為真的判斷內(nèi)。這個縮進真的不太好觀察荧呐。????
    }
    else { #跳過
        
        # 2.3 if
        if (commonColorCode) {
            factors = factor(c(as.matrix(as.data.frame(labels))))
            nLabels = as.numeric(factors)
            dim(nLabels) = dim(labels)
        }
        else {
            labels = as.matrix(as.data.frame(labels))
            factors = list()
            for (c in 1:ncol(labels)) factors[[c]] = factor(labels[, 
                c])
            nLabels = sapply(factors, as.numeric)
        }
    }
    # 3 if
    if (max(nLabels, na.rm = TRUE) > length(colorSeq)) { #此處nLabels = labels汉形,max(nLabels, na.rm = TRUE) 返回最大模塊數(shù)值18纸镊,length(colorSeq) = 435,假概疆!跳過
        nRepeats = as.integer((max(labels) - 1)/length(colorSeq)) + 1
        warning(paste("labels2colors: Number of labels exceeds number of avilable colors.",             "Some colors will be repeated", nRepeats, "times."))
        extColorSeq = colorSeq
        for (rep in 1:nRepeats) extColorSeq = c(extColorSeq, 
            paste(colorSeq, ".", rep, sep = ""))
    }
    else { #真逗威,執(zhí)行
        nRepeats = 1 #這個有啥用啊岔冀?下面函數(shù)沒用到呀凯旭!
        extColorSeq = colorSeq #colorSeq 為長度435的顏色向量,
    }
    colors = rep("grey", length(nLabels)) #length(nLabels)等于基因數(shù)目3600使套,生成3600個重復(fù)的"grey"
    fin = !is.na(nLabels) #非NA的值為TRUE罐呼,3600 個TRUE的邏輯向量。(!is.na(moduleLabels)) %>% table() 
    colors[!fin] = naColor #反轉(zhuǎn)向量fin侦高,缺失值NA為TRUE嫉柴,提取所有為TRUE的值,轉(zhuǎn)換為naColor,默認為"grey"奉呛。#也就是說计螺,原來nLabels缺失值部分可以轉(zhuǎn)換默認的”grey“,也可以通過naColor轉(zhuǎn)換為其它配色侧馅。并不是無用危尿。因為默認naColor = "grey",所以這里的colors仍全部為”grey“
    finLabels = nLabels[fin]
    colors[fin][finLabels != 0] = extColorSeq[finLabels[finLabels !=  0]]
    # 4 if
    if (!is.null(dim(labels))) 
        dim(colors) = dim(labels)
    colors
}
<bytecode: 0x000002ac4939e770>
<environment: namespace:WGCNA>

支線函數(shù)

standardColors() 函數(shù)式

WGCNA自帶函數(shù)馁痴。

n指定輸出顏色個數(shù)谊娇,最大435。這個函數(shù)輸出的顏色罗晕,給我那29條的染色體济欢,這不就正好了嗎?找個這么長的顏色向量不容易小渊。

不太理解.GlobalStandardColors 含義法褥,猜測是WGCNA內(nèi)置內(nèi)容。

> standardColors
function (n = NULL) 
{
    if (is.null(n)) 
        return(.GlobalStandardColors)
    if ((n > 0) && (n <= length(.GlobalStandardColors))) {
        return(.GlobalStandardColors[c(1:n)])
    }
    else {
        stop("Invalid number of standard colors requested.")
    }
}
<bytecode: 0x000002ac3026ca78>
<environment: namespace:WGCNA>

any(labels < 0, na.rm = TRUE) 此處為FALSE

any(labels < 0, na.rm = TRUE)中l(wèi)abels為 net$colors 數(shù)值向量酬屉,向量由WGCNA內(nèi)函數(shù)安排半等,應(yīng)該不會有<0的值。

讀作:labels中去掉na值呐萨,然后與0作比較杀饵,如果有一個值<0則返回TRUE。

復(fù)現(xiàn) ??(繞暈了)

由于labels在base包中有同名函數(shù)谬擦。為了更好的重復(fù)切距,這里還是用了labels作為變量名稱。
第3個 if位置看蒙圈了惨远,復(fù)現(xiàn)下谜悟。這里加了0與NA话肖,向量labels = c(2,NA,1,0,2) 中非0非NA的值有重復(fù),修改naColor為非顏色值葡幸,防止混淆最筒。

# #數(shù)據(jù)準備
> labels = c(2,NA,1,0,2)
> names(labels) = rep(paste0("gene",1:4))
> naColor = "apple" #設(shè)置了一個非顏色設(shè)置

## 轉(zhuǎn)換
> labels
## gene1 gene2 gene3 gene4 gene5 
##     2    NA     1     0     2 
> nLabels = labels
# 準備colorSeq相關(guān)
> colorSeq = standardColors()
> head(colorSeq)
## [1] "turquoise" "blue"      "brown"    
## [4] "yellow"    "green"     "red" 
> length(colorSeq)
[1] 435
> extColorSeq = colorSeq 

# 最后的colors
> colors = rep("grey", length(nLabels))
> colors 
# [1] "grey" "grey" "grey" "grey" "grey"


> fin = !is.na(nLabels) 
> fin
## gene1 gene2 gene3 gene4 gene5 
## TRUE FALSE  TRUE  TRUE  TRUE

> colors[!fin] = naColor #定義原向量nLabels中為NA值對應(yīng)位置的顏色為naColor。
> colors
#[1] "grey"  "apple" "grey"  "grey"  "grey" 

> finLabels = nLabels[fin]
> finLabels 
## gene1 gene3 gene4 gene5 
##    2     1     0     2 
> finLabels != 0 #觀察
## gene1 gene3 gene4 gene5 
## TRUE  TRUE FALSE  TRUE
> colors[fin] #觀察
# [1] "grey" "grey" "grey" "grey"
> finLabels[finLabels != 0] #觀察
## gene1 gene3  gene5 
##     2     1      2 
> extColorSeq[finLabels[finLabels != 0]] #觀察礼患。按上面1是钥,2數(shù)值位置索引出顏色,也就是按非空缅叠,非0模塊基因索引出位置悄泥。
# 顏色向量順序與非空基因順序相同。
# [1] "blue"      "turquoise" "blue" 

> colors[fin][finLabels != 0]
# [1] "grey" "grey" "grey"

> colors[fin][finLabels != 0] = extColorSeq[finLabels[finLabels != 0]] #對非空非0的模塊編號進行重新配色肤粱,替換掉原來的grey
    # 4 if
> dim(labels) #觀察
# NULL
> is.null(dim(labels))
# [1] TRUE
> if (!is.null(dim(labels))) #不執(zhí)行弹囚。
    dim(colors) = dim(labels)
> colors
## [1] "blue"      "apple"     "turquoise"
## [4] "grey"      "blue" 

本節(jié)小結(jié):

第3個if的位置實現(xiàn)的是,對net$colors 中的0賦值為"grey"领曼,對net$colorsNA值賦值為了naColor鸥鹉,默認為"grey",也可以用其它值庶骄,這里設(shè)為了非顏色“apple”值毁渗。

另外這里對0值模塊的配色是通過將非0值finLabels != 0重新配色給替換原"grey"完成的。檢驗NA賦值方式是通過將naColor賦值給非顏色值來探索单刁,以免與原顏色值重復(fù)灸异。

小結(jié)

  1. WGCNA中的standardColors() 函數(shù)輸出的配色字符向量長度為435,可以用作一個配色板羔飞。

  2. 用層級標題的方式梳理if條件肺樟。

  3. 第3個if的位置實現(xiàn)的是,對net$colors 中的0賦值為"grey"逻淌,對net$colorsNA值賦值為了naColor么伯,默認為"grey",也可以用其它值卡儒。

    另外這里對0值模塊的配色是通過將非0值finLabels != 0重新配色給替換原"grey"完成的田柔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骨望,隨后出現(xiàn)的幾起案子硬爆,更是在濱河造成了極大的恐慌,老刑警劉巖锦募,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆屯,死亡現(xiàn)場離奇詭異邻遏,居然都是意外死亡糠亩,警方通過查閱死者的電腦和手機虐骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赎线,“玉大人廷没,你說我怎么就攤上這事〈沽龋” “怎么了颠黎?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滞项。 經(jīng)常有香客問我狭归,道長,這世上最難降的妖魔是什么文判? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任过椎,我火速辦了婚禮,結(jié)果婚禮上戏仓,老公的妹妹穿的比我還像新娘疚宇。我一直安慰自己,他們只是感情好赏殃,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布敷待。 她就那樣靜靜地躺著,像睡著了一般仁热。 火紅的嫁衣襯著肌膚如雪榜揖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天股耽,我揣著相機與錄音根盒,去河邊找鬼。 笑死物蝙,一個胖子當(dāng)著我的面吹牛炎滞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诬乞,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼册赛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了震嫉?” 一聲冷哼從身側(cè)響起森瘪,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎票堵,沒想到半個月后扼睬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年窗宇,在試婚紗的時候發(fā)現(xiàn)自己被綠了措伐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡军俊,死狀恐怖侥加,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粪躬,我是刑警寧澤担败,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站镰官,受9級特大地震影響提前,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泳唠,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一岖研、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧警检,春花似錦孙援、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至镶奉,卻和暖如春础淤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哨苛。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工鸽凶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人建峭。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓玻侥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亿蒸。 傳聞我的和親對象是個殘疾皇子凑兰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容