clusterProfiler: 分析+可視化GO和KEGG富集的轉(zhuǎn)錄組R包

寫作之友


基因和基因簇的功能譜 (functional profiles) 的統(tǒng)計(jì)學(xué)分析及可視化

G Yu, LG Wang, Y Han, QY He. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology 2012, 16(5):284-287.doi:10.1089/omi.2011.0118

1. 關(guān)于 clusterProfiler

  • 上面說的功能譜 (functional profiles) 就是 GO 和 KEGG.
  • Jimmy大神說這可是個(gè)神包啊~

瞅一眼這個(gè)包里都有什么:

library(clusterProfiler)
ls(package:clusterProfiler)
#  [1] "bitr"                 "bitr_kegg"           
#  [3] "browseKEGG"           "buildGOmap"          
#  [5] "cnetplot"             "compareCluster"      
#  [7] "dotplot"              "download_KEGG"       
#  [9] "dropGO"               "emapplot"            
# [11] "enrichDAVID"          "enricher"            
# [13] "enrichGO"             "enrichKEGG"          
# [15] "enrichMKEGG"          "geneID"              
# [17] "geneInCategory"       "Gff2GeneTable"       
# [19] "go2ont"               "go2term"             
# [21] "gofilter"             "goplot"              
# [23] "groupGO"              "GSEA"                
# [25] "gseaplot"             "gseGO"               
# [27] "gseKEGG"              "gseMKEGG"            
# [29] "gsfilter"             "heatplot"            
# [31] "idType"               "ko2name"             
# [33] "merge_result"         "plotGOgraph"         
# [35] "read.gmt"             "ridgeplot"           
# [37] "search_kegg_organism" "setReadable"         
# [39] "simplify"             "uniprot_get"   

2. 一些 眾所周知的 術(shù)語

  • Gene sets and pathway

  • Gene Ontology (GO)

  • Kyoto Encyclopedia of Genes and Genomes (KEGG)

    這里引用臺(tái)灣大學(xué)醫(yī)學(xué)研究部 (Department of Medical Research) 許家郎專案助理研究員 《共同研究室電子報(bào) 第五十四期 JUN.10.2018》。

    基因集(gene set)指的是一群基因的集合尘执,且這群基因具有類似的性質(zhì)或功能。對(duì)於生醫(yī)學(xué)者最熟悉的基因集,莫過於生物路徑(biological pathway)温治,例如IGF signaling pathway但绕,一個(gè)反應(yīng)路徑是由一連串基因間的活化六孵、抑制、或交互作用所組成冠息,如果把所有參與這條生物路徑的基因集合起來,就可稱做基因集。目前線上已有許多生物路徑的資料庫,例如由京都大學(xué)Minoru Kanehisa教授於1995年創(chuàng)立的KEGG(Kyoto Encyclopedia of Genes and Genomes),與由歐洲生物資訊研究所(EBI)建構(gòu)的Reactome資料庫翁垂。這類型資料庫比較嚴(yán)謹(jǐn),大多利用人工閱讀文獻(xiàn)啼肩,且兩基因間的調(diào)控關(guān)係需有明確實(shí)驗(yàn)證據(jù)才會(huì)收錄矢劲,因此是很好的基因集來源躺同,並且這些生物路徑資料庫通常會(huì)提供生物路徑,來呈現(xiàn)完整的調(diào)控關(guān)係民效,對(duì)於理解基因間的調(diào)控關(guān)係有很大的幫助。

    另一個(gè)常見的基因集來自於Gene Ontology (GO) Consortium。GO主要目的是訂定一套標(biāo)準(zhǔn)詞彙(controlled vocabulary)逆甜,用來描述基因的功能斟或。主要有三大分支御毅,分別是Cellular component (CC)酥泛,Molecular function (MF)與Biological process (BP)呆躲。從字面上來看,CC中的詞(term)是用來描述指基因產(chǎn)物在細(xì)胞內(nèi)外的位置辅甥,例如plasma membrane;MF則用來定義基因產(chǎn)物分子層次的功能,例如DNA binding拨扶;而BP是用來描述基因產(chǎn)物所參與的生物路徑或機(jī)制垦梆,例如cell death京腥。

  • Other gene sets
    包括但不限于:Disease Ontology (DO), Disease Gene Network (DisGeNET), wikiPathways, Molecular Signatures Database (MSigDb)

3. 功能富集分析方法

  • 過表征分析 (over representation analysis, ORA)

  • 基因富集分析 (gene set enrichment analysis, GSEA)

    引用源同上他宛。

    基因集的分析策略可以分成兩類: over-representation analysis (ORA)與gene-set enrichment analysis (GSEA)。這兩種方法最大的差別是讯检,ORA會(huì)先經(jīng)過篩選,挑出我們有興趣的基因投放,而GSEA則不經(jīng)過篩選基因的動(dòng)作。以轉(zhuǎn)錄體資料為例,實(shí)驗(yàn)設(shè)計(jì)上蛤肌,通常會(huì)比較兩種狀態(tài)赔硫,並利用統(tǒng)計(jì)方法找出哪些基因具有「表現(xiàn)差異」,可能會(huì)設(shè)定統(tǒng)計(jì)檢定的p值或fold-change僵芹,來決定這是我們有興趣的基因凿跳,接著就針對(duì)這群基因做解讀茧彤。這樣篩選的過程壁顶,p值或fold-change如何設(shè)定才能抓出真正具有「生物意義」的基因许蓖,且這種方法把每個(gè)基因都視為同等重要,然而每個(gè)基因的貢獻(xiàn)程度也許是不同的(即表現(xiàn)量差異大的可能比較重要)沛豌。而GSEA不做任何篩選動(dòng)作,將所有實(shí)驗(yàn)資料放入分析。

    ……ORA的方法……我們關(guān)心的是:有興趣的基因中(genes of interest),與某個(gè)基因集(gene set)桨啃,共同基因有幾個(gè)(K值)……我們可以用超幾何分布(Hypergeometric distribution)或二項(xiàng)式分佈(binomial distribution)來計(jì)算觀察值k的機(jī)率丧慈。

    ……GSEA的概念……首先將高通量實(shí)驗(yàn)所量測(cè)到的基因排序鹃愤,排列的順序是根據(jù)實(shí)驗(yàn)量測(cè)到的數(shù)值決定……GSEA採用一個(gè)稱random walk的方法,也就是從基因列表的頭走到尾,如果碰到是基因集的基因就加分肖抱,不是則扣分。走完一趟後镐依,回頭看走到哪兒時(shí)喜每,分?jǐn)?shù)最高(或最低),這個(gè)分?jǐn)?shù)就是所謂的enrichment score (ES)……GSEA利用permutation testing的方法刑巧,也就是隨機(jī)抓取同等數(shù)量的基因當(dāng)基因集啊楚,並計(jì)算得到隨機(jī)的ES浑彰,去估算實(shí)際觀察到的ES的P值,如果P值小於所設(shè)定的統(tǒng)計(jì)條件颜价,就可以確保這ES並不是隨機(jī)就會(huì)發(fā)生诉濒。

clusterProfiler 支持多種本體論/通路 (ontology/pathway) 的超幾何檢驗(yàn)和基因富集分析。并且包內(nèi)的函數(shù) enricher()GSEA() 能夠分別對(duì)用戶定義的注釋信息進(jìn)行超幾何檢驗(yàn)及基因富集分析横辆。

4. 輸入數(shù)據(jù)

對(duì)于過表征分析 (over representation analysis, ORA), 我們需要的是一個(gè)包含基因ID的向量狈蚤,基因ID可以從差異表達(dá)分析獲得(例如 DESeq2 包)。

對(duì)于基因富集分析 (gene set enrichment analysis, GSEA), 我們需要一個(gè)經(jīng)排序的基因列表脆侮,在這里我們調(diào)用 DOSE 包中的示例數(shù)據(jù) geneList .

The geneList contains three features:

  1. numeric vector: fold change or other type of numerical variable
  2. named vector: every number was named by the corresponding gene ID
  3. sorted vector: number should be sorted in decreasing order
data(geneList, package="DOSE")
head(geneList)
# 4312     8318    10874    55143    55388      991 
# 4.572613 4.514594 4.418218 4.144075 3.876258 3.677857 

## 假設(shè)想得到 |log2(FC)|>2 的 DEGs.
gene <- names(geneList)[abs(geneList) > 2]
head(gene)
# [1] "4312"  "8318"  "10874" "55143" "55388" "991"

5. GO分析

5.1 支持的物種

GO分析(groupGO(), enrichGO(), gseGO())支持Bioconductor提供的 OrgDb 中已有的20個(gè)物種靖避。也可以通過AnnotationHub在線檢索并抓取 OrgDb.

5.2 GO分類

函數(shù) groupGO() 的設(shè)計(jì)是基于在特定水平的GO分布,從而對(duì)基因進(jìn)行分類幻捏。

library(org.Hs.eg.db)
## 轉(zhuǎn)換ID,參數(shù)'gene'可以是OrgDb支持的任何ID形式
gene.df <- bitr(gene, fromType = "ENTREZID", 
                toType = c("ENSEMBL", "SYMBOL"),
                OrgDb = org.Hs.eg.db) 
head(gene.df)
#   ENTREZID         ENSEMBL SYMBOL
# 1     4312 ENSG00000196611   MMP1
# 2     8318 ENSG00000093009  CDC45
# 3    10874 ENSG00000109255    NMU
# 4    55143 ENSG00000134690  CDCA8
# 5    55388 ENSG00000065328  MCM10
# 6      991 ENSG00000117399  CDC20
ggo <- groupGO(gene     = gene,
               OrgDb    = org.Hs.eg.db,
               ont      = "CC", 
               level    = 3,     ## Specific GO Level.
               readable = TRUE)  ## the gene IDs will mapping to gene symbols.
head(ggo)
#                    ID                    Description Count GeneRatio
# GO:0005886 GO:0005886                plasma membrane    52    52/207
# GO:0005628 GO:0005628              prospore membrane     0     0/207
# GO:0005789 GO:0005789 endoplasmic reticulum membrane     8     8/207
# GO:0019867 GO:0019867                 outer membrane     2     2/207
#                                                                                         #                                                                                         #                                                                                         #                                                          geneID
# GO:0005886 S100A9/MELK/S100A8/MARCO/ASPM/CXCL10/LAMP3/CEP55/UGT8/UBE2C/SLC7A5/CXCL9/FADS2/MSLN/IL1R2/KIF18A/S100P/GZMB/TRAT1/GABRP/AQP9/GPR19/SLC2A6/KIF20A/LAG3/NUDT1/CACNA1D/VSTM4/CORIN/KCNK15/CA12/KCNE4/HLA-DQA1/ADH1B/PDZK1/C7/ACKR1/COL17A1/PSD3/EMCN/SLC44A4/LRP2/NLGN4X/MAPT/ERBB4/CX3CR1/LAMP5/ABCA8/STEAP4/PTPRT/TMC5/CYBRD1
# GO:0005628                                                                             #                                                                                         #                                                                                         #                                                                 
# GO:0005789                                                                             #                                                                                         #                                                                                         #               FADS2/CDK1/CHODL/ITPR1/HLA-DQA1/CYP4F8/CYP4B1/FMO5
# GO:0019867                                                                             #                                                                                         #                                                                                         #                                                         MAOB/PGR

Level 1 provides the highest list coverage with the least amount of term specificity. With each increasing level coverage decreases while specificity increases so that level 5 provides the least amount of coverage with the highest term specificity. (Dennis, Glynn, et al)

5.3 GO ORA

ego <- enrichGO(gene          = gene,
                universe      = names(geneList),
                OrgDb         = org.Hs.eg.db,
                ont           = "CC",
                pAdjustMethod = "BH",
                pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.05,
        readable      = TRUE)
head(ego)
#                    ID                              Description GeneRatio   BgRatio       pvalue     p.adjust       qvalue
# GO:0000779 GO:0000779 condensed chromosome, centromeric region    14/197  85/11434 1.662431e-10 3.802012e-08 3.572360e-08
# GO:0000776 GO:0000776                              kinetochore    15/197 104/11434 2.551686e-10 3.802012e-08 3.572360e-08
# GO:0000775 GO:0000775           chromosome, centromeric region    17/197 147/11434 5.495085e-10 5.458451e-08 5.128746e-08
# GO:0000793 GO:0000793                     condensed chromosome    17/197 154/11434 1.141189e-09 8.501857e-08 7.988322e-08
#                                                                                         #                  geneID Count
# GO:0000779                   CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/CCNB1    14
# GO:0000776              CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/AURKB/CCNB1    15
# GO:0000775  CDCA8/CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/NCAPG/AURKB/CCNB1    17
# GO:0000793 CENPE/NDC80/TOP2A/NCAPH/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/CHEK1/CCNB1    17

如果直接調(diào)用 OrgDb 中的 ID,則需要在參數(shù)中確定 'KeyType'.

ego2 <- enrichGO(gene         = gene.df$ENSEMBL,
                OrgDb         = org.Hs.eg.db,
                keyType       = 'ENSEMBL',
                ont           = "CC",
                pAdjustMethod = "BH",
                pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.05)

通過設(shè)置參數(shù) readable=Ture 或 函數(shù) setReadable() 可以將 Gene ID 轉(zhuǎn)換為 symbol.

ego2 <- setReadable(ego2, OrgDb = org.Hs.eg.db)

before:

after:

5.3.1 移除特定的 GO term 或 GO level

函數(shù) dropGO 可以在由 enrichGO 得到的結(jié)果中移除特定的 GO term 或 GO level.

5.3.2 將結(jié)果限定在特定的 Go level

enrichGO() 不含設(shè)置 GO level 的參數(shù)伊佃,而函數(shù) gofilter() 可以將結(jié)果限定在特定的 GO level.

5.3.3 GO term 去冗余

rmredunego <- simplify(ego, cutoff=0.7, by="p.adjust", select_fun=min)

before:

after:

5.4 GO GSEA

ego3 <- gseGO(geneList     = geneList,
              OrgDb        = org.Hs.eg.db,
              ont          = "CC",
              nPerm        = 1000,   ## 排列數(shù)
              minGSSize    = 100,
              maxGSSize    = 500,
              pvalueCutoff = 0.05,
              verbose      = FALSE)  ## 不輸出結(jié)果

6. KEGG分析

函數(shù) search_kegg_organism() 可以幫助搜索 KEGG 數(shù)據(jù)庫支持的物種航揉。

物種縮寫戳這里:https://www.genome.jp/kegg/catalog/org_list.html

earch_kegg_organism('ece', by='kegg_code')   
#     kegg_code                        scientific_name common_name
# 366       ece Escherichia coli O157:H7 EDL933 (EHEC)        <NA>
ecoli <- search_kegg_organism('Escherichia coli', by='scientific_name')
dim(ecoli)
# [1] 65  3
head(ecoli)
#     kegg_code                        scientific_name common_name
# 361       eco           Escherichia coli K-12 MG1655        <NA>
# 362       ecj            Escherichia coli K-12 W3110        <NA>
# 363       ecd            Escherichia coli K-12 DH10B        <NA>
# 364       ebw                Escherichia coli BW2952        <NA>
# 365      ecok            Escherichia coli K-12 MDS42        <NA>
# 366       ece Escherichia coli O157:H7 EDL933 (EHEC)        <NA>
search_kegg_organism('hsa', by='kegg_code')
#   kegg_code scientific_name common_name
# 1       hsa    Homo sapiens       human
dim(hsapiens)   
[1] 1 3
hsapiens <- search_kegg_organism('Homo sapiens', by='scientific_name')
hsapiens
#   kegg_code scientific_name common_name
# 1       hsa    Homo sapiens       human

6.1 KEGG ORA

data(geneList, package="DOSE")
gene <- names(geneList)[abs(geneList) > 2]

kk <- enrichKEGG(gene         = gene,
                 organism     = 'hsa',
                 pvalueCutoff = 0.05)
head(kk)
#                ID
# hsa04110 hsa04110
# hsa04114 hsa04114
# hsa04218 hsa04218
# hsa04061 hsa04061
# hsa03320 hsa03320
# hsa04914 hsa04914
#                                                            Description
# hsa04110                                                    Cell cycle
# hsa04114                                                Oocyte meiosis
# hsa04218                                           Cellular senescence
# hsa04061 Viral protein interaction with cytokine and cytokine receptor
# hsa03320                                        PPAR signaling pathway
# hsa04914                       Progesterone-mediated oocyte maturation
#          GeneRatio  BgRatio       pvalue     p.adjust       qvalue
# hsa04110     11/93 124/7861 1.966898e-07 3.815781e-05 3.726753e-05
# hsa04114     10/93 125/7861 1.907932e-06 1.850694e-04 1.807515e-04
# hsa04218     10/93 160/7861 1.742571e-05 1.048593e-03 1.024128e-03
# hsa04061      8/93 100/7861 2.162048e-05 1.048593e-03 1.024128e-03
# hsa03320      7/93  76/7861 2.906892e-05 1.127874e-03 1.101559e-03
# hsa04914      7/93  99/7861 1.587827e-04 5.133975e-03 5.014191e-03
#                                                      geneID Count
# hsa04110 8318/991/9133/890/983/4085/7272/1111/891/4174/9232    11
# hsa04114    991/9133/983/4085/51806/6790/891/9232/3708/5241    10
# hsa04218     2305/4605/9133/890/983/51806/1111/891/776/3708    10
# hsa04061           3627/10563/6373/4283/6362/6355/9547/1524     8
# hsa03320                 4312/9415/9370/5105/2167/3158/5346     7
# hsa04914                    9133/890/983/4085/6790/891/5241     7

6.2 KEGG GSEA

kk2 <- gseKEGG(geneList     = geneList,
               organism     = 'hsa',
               nPerm        = 1000,
               minGSSize    = 120,
               pvalueCutoff = 0.05,
               verbose      = FALSE)
head(kk2,n=3)
#                ID                Description setSize enrichmentScore
# hsa04151 hsa04151 PI3K-Akt signaling pathway     322      -0.3482755
# hsa04510 hsa04510             Focal adhesion     188      -0.4188582
# hsa03013 hsa03013              RNA transport     131       0.4116488
#                NES      pvalue   p.adjust    qvalues rank
# hsa04151 -1.498250 0.001278772 0.01648352 0.01098901 1997
# hsa04510 -1.712296 0.001390821 0.01648352 0.01098901 2183
# hsa03013  1.750526 0.003067485 0.01648352 0.01098901 3383
#                            leading_edge
# hsa04151 tags=23%, list=16%, signal=20%
# hsa04510 tags=27%, list=17%, signal=23%
# hsa03013 tags=40%, list=27%, signal=29%
#                                                              core_enrichment
# hsa04151 2252/7059/92579/5563/5295/6794/1288/7010/3910/3371/3082/1291/4602/3791/1027/90993/3441/3643/1129/2322/1975/7450/596/3685/1942/2149/1280/4804/3675/595/2261/7248/2246/4803/3912/1902/1278/1277/2846/2057/1293/2247/55970/5618/7058/10161/56034/3693/4254/3480/4908/5159/1292/3908/2690/3909/8817/9223/4915/3551/2791/63923/3913/9863/3667/1287/3679/7060/3479/80310/1311/5105/2066/1101
# hsa04510                                                                                                                         5228/7424/1499/4636/83660/7059/5295/1288/23396/3910/3371/3082/1291/394/3791/7450/596/3685/1280/3675/595/2318/3912/1793/1278/1277/1293/10398/55742/2317/7058/25759/56034/3693/3480/5159/857/1292/3908/3909/63923/3913/1287/3679/7060/3479/10451/80310/1311/1101
# hsa03013                                                                                         10460/1978/55110/54913/9688/8894/11260/10799/9631/4116/5042/8761/6396/23165/8662/10248/55706/79833/9775/29107/23636/5905/9513/5901/10775/10557/4927/79902/1981/26986/11171/10762/8480/8891/11097/26019/10940/4686/9972/81929/10556/3646/9470/387082/1977/57122/8563/7514/79023/3837/9818/56000

7. 重頭戲——功能富集結(jié)果的可視化

這時(shí)要用到另一個(gè)包:enrichplot 帅涂,它可以實(shí)現(xiàn)多種可視化,更好地說明富集分析結(jié)果笙蒙。

library(enrichplot)

7.1 Bar plot

oragene <- enrichDGN(gene)
barplot(oragene,showCategory = 20)
## 該函數(shù)默認(rèn)參數(shù)為:
## enrichDGN(gene, pvalueCutoff = 0.05, pAdjustMethod = "BH", universe,
##   minGSSize = 10, maxGSSize = 500, qvalueCutoff = 0.2,
##   readable = FALSE)

7.2 Dot Plot

gseagene <- gseNCG(geneList, nPerm=10000)
p1 <- dotplot(oragene, showCategory=30) + ggtitle("dotplot for ORA")
p2 <- dotplot(gseagene, showCategory=30) + ggtitle("dotplot for GSEA")
plot_grid(p1, p2, ncol=2)
## 一個(gè)瘦一個(gè)胖好丑啊

7.3 Gene-Concept Network

前面的 兩款神器 兩個(gè)函數(shù),都只能展示富集最顯著的 GO term轧葛,而函數(shù) cnetplot() 可以將基因與生物學(xué)概念 (e.g.* GO terms or KEGG pathways) 的關(guān)系繪制成網(wǎng)狀圖艇搀。

oragnx <- setReadable(oragene, 'org.Hs.eg.db', 'ENTREZID')  ## 將 Gene ID 轉(zhuǎn)換為 symbol
cnetplot(orangx, foldChange=geneList)
cnetplot(oragnx, categorySize="pvalue", foldChange=geneList)  ## categorySize 可以是 "pvalue" 或 "geneNum" 
cnetplot(oragnx, foldChange=geneList, circular = TRUE, colorEdge = TRUE)  ## 圓形布局,給線條上色

7.4 Heatmap

熱圖能夠簡化結(jié)果衷笋,更容易分辨表達(dá)模式 (expression patterns) 矩屁。

heatplot(oragnx, foldChange=geneList)

7.5 Enrichment Map

Enrichment Map 可以將富集條目和重疊的基因集整合為一個(gè)網(wǎng)絡(luò)圖,相互重疊的基因集則趨向于成簇泊脐,從而易于分辨功能模型。

emapplot(oragene)

7.6 UpSet Plot

函數(shù) upsetplot()cneplot() 的一種替代方案容客,用于可視化基因與基因集間的復(fù)雜關(guān)聯(lián),而 upsetplot() 更著重于不同基因集間基因的重疊情況缩挑。

upsetplot(oragene)

7.7 GSEA結(jié)果的表達(dá)分布疊嶂圖 (ridgeline plot for expression distribution of GSEA result)

更直觀地展示上調(diào)/下調(diào)的通路。

ridgeplot(gseagene)

7.8 富集條目在 PubMed 上的趨勢(shì)

函數(shù) pmcplot() 可以就某些富集 條目/通路 繪制其在 PubMed 上的 數(shù)量/比例 折線圖镜遣。

terms <- oragene$Description[1:3]
p <- pmcplot(terms, 2012:2019) ## 默認(rèn)為proportion=TRUE
p2 <- pmcplot(terms, 2012:2019, proportion=FALSE)
plot_grid(p, p2, ncol=2)

7.9 goplot

函數(shù) goplot() 接受 enrichGO() 的輸出士袄,并將其可視化。

7.10 browseKEGG

函數(shù) browseKEGG 可以幫你打開瀏覽器娄柳,嗯。

browseKEGG(kk, 'hsa04110')

7.11 pathview 包里的 上帝視角 PATHVIEW!

library(pathview)
hsa04110 <- pathview(gene.data  = geneList,
                     pathway.id = "hsa04110",
                     species    = "hsa",
                     limit      = list(gene=max(abs(geneList)), cpd=1)) ## cpd, compound
# Info: Downloading xml files for hsa04110, 1/1 pathways..
# Info: Downloading png files for hsa04110, 1/1 pathways..
# 'select()' returned 1:1 mapping between keys and columns
# Info: Working in directory /YOUR PATH/Project/clusterProfiler
# Info: Writing image file hsa04110.pathview.png

References


最后秫筏,向大家隆重推薦生信技能樹的一系列干貨挎挖!

  1. 生信技能樹全球公益巡講:https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
  2. B站公益74小時(shí)生信工程師教學(xué)視頻合輯:https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
  3. 招學(xué)徒:https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市崔涂,隨后出現(xiàn)的幾起案子始衅,更是在濱河造成了極大的恐慌,老刑警劉巖汛闸,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诸老,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)别伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宦芦,“玉大人,你說我怎么就攤上這事调卑÷丈埃” “怎么了注益?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵溯捆,是天一觀的道長。 經(jīng)常有香客問我提揍,道長,這世上最難降的妖魔是什么劳跃? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮刨仑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杉武。我一直安慰自己,他們只是感情好轻抱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著封拧,像睡著了一般志鹃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曹铃,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音秘血,去河邊找鬼。 笑死灰粮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粘舟。 我是一名探鬼主播熔脂,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼霞揉,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了适秩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤秽荞,失蹤者是張志新(化名)和其女友劉穎岗宣,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耗式,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年彪见,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片余指。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跷坝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柴钻,到底是詐尸還是另有隱情,我是刑警寧澤贴届,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站毫蚓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏元潘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一翩概、第九天 我趴在偏房一處隱蔽的房頂上張望袖订。 院中可真熱鬧嗅虏,春花似錦、人聲如沸皮服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至择同,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敲才,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工紧武, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阻星。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像妥箕,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畦幢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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