GeneOverlap: 用于基因Overlap的檢驗(yàn)及可視化R包

參考學(xué)習(xí)資料:https://www.bioconductor.org/packages/release/bioc/vignettes/GeneOverlap/inst/doc/GeneOverlap.pdf

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

Overlapping的基因列表可以揭示生物學(xué)意義,并可能形成新的假說耳胎。例如,組蛋白修飾是一個(gè)重要的細(xì)胞機(jī)制胰默,可以包裝和重新包裝染色質(zhì)憎瘸。通過使染色質(zhì)結(jié)構(gòu)更密集或更疏松荣暮,起到開啟或關(guān)閉基因表達(dá)的作用硬纤。組蛋白H3(H3K4me3)第4位賴氨酸(H3K4me3)上的三甲基化與基因激活有關(guān)敞峭,其全基因組富集可以通過ChIP-seq實(shí)驗(yàn)進(jìn)行定位。由于H3K4me3的激活作用球订,如果我們將H3K4me3結(jié)合的基因與高表達(dá)的基因重疊后裸,我們應(yīng)該預(yù)計(jì)會有積極的關(guān)聯(lián)。類似地冒滩,我們可以在不同組蛋白修飾的基因列表與不同表達(dá)組的基因列表之間進(jìn)行這種Overlap微驶,從而確定每個(gè)組蛋白修飾在基因調(diào)控中的作用。
這個(gè)問題可以表示為超幾何分布或結(jié)合表(這可以通過費(fèi)舍爾精確檢驗(yàn)來解決开睡;請參閱GeneOverlap文檔)因苹。這項(xiàng)任務(wù)在生物學(xué)研究中非常常見较店,GeneOverlap是為了操作數(shù)據(jù)、執(zhí)行測試并可視化Overlapping的結(jié)果容燕。
GeneOverlap包由兩個(gè)類組成:GeneOverlap和GeneOverlipMatrix。GeneOverlap類執(zhí)行測試婚度,并充當(dāng)GeneOverlipMatrix類的構(gòu)建塊蘸秘。
首先是安裝和加載包,因?yàn)槭珍浽赽ioconductor蝗茁,需要用到相應(yīng)的安裝函數(shù):

rm(list = ls())
#BiocManager::install("GeneOverlap")
library(GeneOverlap)
data(GeneOverlap)
sapply(hESC.ChIPSeq.list, length)
sapply(hESC.RNASeq.list, length)
gs.RNASeq

若要使用GeneOverlay類醋虏,請創(chuàng)建兩個(gè)表示基因名稱的字符向量。一種簡單的方法是使用read.table("filename.txt")從文本文件中讀取它們哮翘。
該包有內(nèi)置數(shù)據(jù)集包括幾個(gè)基因列表數(shù)據(jù),可以用data()加載【苯溃現(xiàn)在,讓我們看看數(shù)據(jù)中包含的內(nèi)容:有三個(gè)對象饭寺。hESC.ChIPSeq.listhESC.RNASeq.list對象包含來自Chip-seq和RNA-seq實(shí)驗(yàn)的基因列表阻课。gs.RNASeq變量包含基因組背景中的基因數(shù)量。后面有介紹它們是如何創(chuàng)建的艰匙。先來看看基因列表中有多少個(gè)基因限煞。

> sapply(hESC.ChIPSeq.list, length)
 H3K4me3  H3K9me3 H3K27me3 H3K36me3 
   13448      297     3853     4533 
> sapply(hESC.RNASeq.list, length)
  Exp High Exp Medium    Exp Low 
      6540       6011       8684 
> gs.RNASeq
[1] 21196

在GeneOverlap中,我們將基因列表集合稱為表示為命名列表的基因集员凝。在這里我們可以看到署驻,ChIP-seq基因集包含四個(gè)不同組蛋白標(biāo)記的基因列表:H3K4me3、H3K9me3健霹、H3K27me3和H3K36me3旺上;RNA-seq基因集包含三個(gè)不同表達(dá)水平的基因列表:高、中糖埋、低表達(dá)水平宣吱。有兩個(gè)組蛋白標(biāo)記與基因激活相關(guān):H3K4me3和H3K36me3,另外兩個(gè)與基因抑制相關(guān):H3K9me3和H3K27me3阶捆。

2.檢驗(yàn)兩個(gè)基因列表之間的GeneOverlap

我們想要探索激活標(biāo)記-H3K4me3是否與高表達(dá)的基因相關(guān)凌节。首先,讓我們構(gòu)造一個(gè)GeneOverlap對象

go.obj <- newGeneOverlap(hESC.ChIPSeq.list$H3K4me3,
                         hESC.RNASeq.list$"Exp High",
                         genome.size=gs.RNASeq)
go.obj

顯示如下:

> go.obj
GeneOverlap object:
listA size=13448
listB size=6540
Intersection size=5916
Overlap testing has not been performed yet.

正如我們所看到的洒试,GeneOverlap構(gòu)造函數(shù)已經(jīng)為我們做了一些基本的數(shù)據(jù)統(tǒng)計(jì)倍奢,比如交叉點(diǎn)的數(shù)量。為了檢驗(yàn)關(guān)聯(lián)性的統(tǒng)計(jì)顯著性垒棋,我們做了GeneOverlap類卒煞,將問題描述為檢驗(yàn)兩個(gè)變量是否獨(dú)立,這可以表示為一個(gè)列聯(lián)表(contingency table)叼架,然后使用Fisher的精確檢驗(yàn)來尋找統(tǒng)計(jì)顯著性畔裕。這里的P值為零衣撬,這意味著overlap非常重要。費(fèi)舍爾精確檢驗(yàn)還給出了代表關(guān)聯(lián)強(qiáng)度的odds ratio扮饶。如果odds ratio等于或小于1具练,則兩個(gè)列表之間沒有關(guān)聯(lián)。如果odds ratio遠(yuǎn)大于1甜无,那么這種關(guān)聯(lián)就很強(qiáng)扛点。該類還計(jì)算Jaccard指數(shù),該指數(shù)衡量兩個(gè)列表之間的相似性岂丘。Jaccard指數(shù)在0和1之間變化陵究,0表示兩者之間沒有相似性,1表示兩者相同奥帘。要顯示更多詳細(xì)信息铜邮,請使用print函數(shù)。

go.obj <- testGeneOverlap(go.obj)
go.obj
> go.obj
GeneOverlap object:
listA size=13448
listB size=6540
Intersection size=5916
Overlapping p-value=0e+00
Jaccard Index=0.4
> print(go.obj)
Detailed information about this GeneOverlap object:
listA size=13448, e.g. ENSG00000187634 ENSG00000188976 ENSG00000187961
listB size=6540, e.g. ENSG00000000003 ENSG00000000419 ENSG00000000460
Intersection size=5916, e.g. ENSG00000188976 ENSG00000187961 ENSG00000187608
Union size=14072, e.g. ENSG00000187634 ENSG00000188976 ENSG00000187961
Genome size=21196
# Contingency Table:
     notA  inA
notB 7124 7532
inB   624 5916
Overlapping p-value=0e+00
Odds ratio=9.0
Overlap tested using Fisher's exact test (alternative=greater)
Jaccard Index=0.4

顯示odds ratio為9.0寨蹋,Jaccard指數(shù)為0.4松蒜。print函數(shù)還顯示列聯(lián)表(contingency table),該表說明了問題是如何形成的已旧。

此外牍鞠,我們還想知道H3K4me3是否與低表達(dá)的基因有關(guān)。修改參數(shù):

go.obj <- newGeneOverlap(hESC.ChIPSeq.list$H3K4me3,
                         hESC.RNASeq.list$"Exp Low",
                         genome.size=gs.RNASeq)
go.obj <- testGeneOverlap(go.obj)
print(go.obj)

結(jié)果為

> print(go.obj)
Detailed information about this GeneOverlap object:
listA size=13448, e.g. ENSG00000187634 ENSG00000188976 ENSG00000187961
listB size=8684, e.g. ENSG00000000005 ENSG00000000938 ENSG00000000971
Intersection size=2583, e.g. ENSG00000187583 ENSG00000187642 ENSG00000215014
Union size=19549, e.g. ENSG00000187634 ENSG00000188976 ENSG00000187961
Genome size=21196
# Contingency Table:
     notA   inA
notB 1647 10865
inB  6101  2583
Overlapping p-value=1
Odds ratio=0.1
Overlap tested using Fisher's exact test (alternative=greater)
Jaccard Index=0.1

與高表達(dá)的基因相比评姨,P值現(xiàn)在是1难述,odds ratio為0.1。因此吐句,H3K4me3與基因抑制無關(guān)胁后。
一旦創(chuàng)建了一個(gè)GeneOverlap對象,就可以使用幾個(gè)訪問器來提取它的節(jié)點(diǎn)值slots嗦枢。例如

> head(getIntersection(go.obj))
[1] "ENSG00000187583" "ENSG00000187642" "ENSG00000215014" "ENSG00000142609" "ENSG00000203301"
[6] "ENSG00000215912"
> getOddsRatio(go.obj)
[1] 0.06418943
> getContbl(go.obj)
     notA   inA
notB 1647 10865
inB  6101  2583
> getContbl(go.obj)
     notA   inA
notB 1647 10865
inB  6101  2583
> getGenomeSize(go.obj)
[1] 21196

也可以在創(chuàng)建對象后更改slots "listA", "listB" 和 "genome.size"攀芯。例如
setListA(go.obj) <- hESC.ChIPSeq.listH3K27me3 setListB(go.obj) <- hESC.RNASeq.list"Exp Medium"
go.obj

> go.obj
GeneOverlap object:
listA size=3853
listB size=6011
Intersection size=1549
Overlap testing has not been performed yet.

更換上述任一slots后,對象進(jìn)入未檢驗(yàn)狀態(tài)文虏。所以我們需要重新檢驗(yàn)一下:

> go.obj <- testGeneOverlap(go.obj)
> go.obj
GeneOverlap object:
listA size=3853
listB size=6011
Intersection size=1549
Overlapping p-value=2.8e-69
Jaccard Index=0.2

我們還可以改變基因組大小侣诺,看看p值是如何隨之變化的。

v.gs <- c(12e3, 14e3, 16e3, 18e3, 20e3)
setNames(sapply(v.gs, function(g) {
  setGenomeSize(go.obj) <- g
  go.obj <- testGeneOverlap(go.obj)
  getPval(go.obj)}), v.gs)

結(jié)果如下:

> setNames(sapply(v.gs, function(g) {
+   setGenomeSize(go.obj) <- g
+   go.obj <- testGeneOverlap(go.obj)
+   getPval(go.obj)}), v.gs)
       12000        14000        16000        18000        20000 
1.000000e+00 9.999746e-01 6.039536e-05 9.006016e-24 5.589067e-51 

正如預(yù)期的那樣氧秘,基因組大小越大年鸳,P值越顯著。這是因?yàn)橥柘啵S著 "universe"的增長搔确,兩個(gè)基因列表偶然重疊的可能性變得越來越小。

3.Visualizing all pairwise overlaps

當(dāng)需要比較兩個(gè)基因集合,每個(gè)都有一個(gè)或多個(gè)列表時(shí)膳算,手動比較它們的效率會相當(dāng)?shù)妥丁?梢詷?gòu)造矩陣涕蜂,其中行表示來自一個(gè)集合的列表华匾,而列表示來自另一個(gè)集合的列表。矩陣的每個(gè)元素都是一個(gè)GeneOverlay對象机隙。要完全可視化這些重疊信息瘦真,可以使用熱圖。為了說明這一點(diǎn)黍瞧,我們希望將Chip-seq的所有基因列表與rna-seq的所有基因列表進(jìn)行比較。

gom.obj <- newGOM(hESC.ChIPSeq.list, hESC.RNASeq.list,
                  gs.RNASeq)
drawHeatmap(gom.obj)
圖1

newGOM構(gòu)造函數(shù)使用兩個(gè)命名列表創(chuàng)建一個(gè)新的GeneOverlipMatrix對象原杂。然后印颤,我們需要做的就是使用draHeatmap函數(shù)來顯示它。在熱圖中穿肄,顏色鍵表示odds ratios年局,重要的p值疊加在網(wǎng)格上。
要從GeneOverlipMatrix對象檢索信息咸产,可以使用兩個(gè)重要的訪問器矢否,分別稱為getMatrix和getNestedList。例如脑溢,getMatrix accessor以矩陣形式獲取諸如p值之類的信息

> getMatrix(gom.obj, name="pval")
          Exp High   Exp Medium      Exp Low
H3K4me3  0.0000000 0.000000e+00 1.000000e+00
H3K9me3  0.9996654 7.071538e-13 9.999497e-01
H3K27me3 1.0000000 2.797009e-69 1.061420e-09
H3K36me3 0.0000000 9.999998e-01 1.000000e+00

或者提取odds ratios:

> getMatrix(gom.obj, "odds.ratio")
           Exp High Exp Medium    Exp Low
H3K4me3   8.9672775  3.8589147 0.06418943
H3K9me3   0.6366248  2.3460391 0.62254173
H3K27me3  0.3338513  1.9408115 1.24113618
H3K36me3 10.9219512  0.8265542 0.02145576

getNestedListaccessor可以以嵌套列表的形式獲取每個(gè)比較的基因列表:外部列表表示列僵朗,內(nèi)部列表表示行:

inter.nl <- getNestedList(gom.obj, name="intersection")
str(inter.nl)

另一個(gè)重要的訪問器是方法"[",它允許以類似于矩陣的方式檢索GeneOverlap對象屑彻。例如,

> go.k4.high <- gom.obj[1, 1]
> go.k4.high
GeneOverlap object:
listA size=13448
listB size=6540
Intersection size=5916
Overlapping p-value=0e+00
Jaccard Index=0.4

獲取表示H3K4me3和高表達(dá)基因之間的比較的GeneOverlap對象验庙。還可以使用標(biāo)簽獲取GeneOverlap對象,例如

> gom.obj["H3K9me3", "Exp Medium"]
GeneOverlap object:
listA size=297
listB size=6011
Intersection size=142
Overlapping p-value=7.1e-13
Jaccard Index=0.0

GeneOverlapMatrix 還可以對一組基因進(jìn)行自我比較社牲。例如粪薛,如果我們想知道Chip-seq基因列表之間是如何關(guān)聯(lián)的,我們可以這樣做

gom.self <- newGOM(hESC.ChIPSeq.list,
                   genome.size=gs.RNASeq)
drawHeatmap(gom.self) 
圖2

僅使用上三角矩陣搏恤。
還可以更改顏色數(shù)量和用于熱圖的顏色违寿。例如:

drawHeatmap(gom.self, ncolused=5, grid.col="Blues", note.col="black")
圖3

或者改為顯示Jaccard指數(shù)值

drawHeatmap(gom.self, what="Jaccard", ncolused=3, grid.col="Oranges",
            note.col="black")
圖4

4.數(shù)據(jù)源及其處理

這里使用的實(shí)驗(yàn)數(shù)據(jù)是從ENCODE [ENCODE Consortium, ]項(xiàng)目的網(wǎng)站下載的。ChIP-seq和RNA-seq樣品均來源于人胚胎干細(xì)胞(hESC)熟空。使用Bowtie[Langmead et al., 2009]和Tophat [Trapnell et al., 2009]將原始讀取文件與參考基因組進(jìn)行比對藤巢。
Cufflinks [Trapnell et al., 2010]被用來從RNA-seq數(shù)據(jù)中估計(jì)基因表達(dá)水平。只保留了蛋白質(zhì)編碼基因以供進(jìn)一步分析息罗。用FPKM狀態(tài)對基因進(jìn)行篩選菌瘪,只保留“OK”狀態(tài)的基因。這給我們留下了21,196個(gè)編碼基因,它們的FPKM值得到了可靠的估計(jì)俏扩。然后將這些基因分為高(FPKM>10)糜工、中(FPKM>1和<=10)和低(FPKM<=1)三組。每組中重復(fù)的基因ID在測試前被刪除录淡。
對于ChIP-seq捌木,使用來自IP處理的一個(gè)復(fù)制和來自輸入控制的一個(gè)復(fù)制。
使用MACS2(v2.0.10)使用默認(rèn)參數(shù)值執(zhí)行Peak calling嫉戚。然后刨裆,Peak列表使用diffReps包進(jìn)行區(qū)域注釋[Shen et al., 2013]。
然后提取在基因區(qū)和啟動子區(qū)域出現(xiàn)Peak的基因彬檀。使用上面獲得的RNA-seq基因列表進(jìn)一步篩選基因帆啃。

5 SessionInfo

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] GeneOverlap_1.22.0 ggthemes_4.2.0     patchwork_1.0.0    forcats_0.4.0      stringr_1.4.0     
 [6] dplyr_0.8.3        purrr_0.3.3        readr_1.3.1        tidyr_1.0.0        tibble_2.1.3      
[11] ggplot2_3.3.0      tidyverse_1.3.0   

loaded via a namespace (and not attached):
 [1] nlme_3.1-141       bitops_1.0-6       fs_1.3.1           usethis_1.5.1      lubridate_1.7.4   
 [6] devtools_2.2.2     RColorBrewer_1.1-2 httr_1.4.1         rprojroot_1.3-2    tools_3.6.1       
[11] backports_1.1.5    utf8_1.1.4         R6_2.4.1           KernSmooth_2.23-16 DBI_1.0.0         
[16] mgcv_1.8-29        colorspace_1.4-1   withr_2.1.2        tidyselect_0.2.5   prettyunits_1.0.2 
[21] processx_3.4.1     curl_4.2           compiler_3.6.1     cli_2.0.1          rvest_0.3.5       
[26] xml2_1.2.2         desc_1.2.0         isoband_0.2.0      labeling_0.3       caTools_1.17.1.2  
[31] scales_1.1.0       callr_3.3.2        digest_0.6.23      pkgconfig_2.0.3    sessioninfo_1.1.1 
[36] dbplyr_1.4.2       rlang_0.4.4.9000   readxl_1.3.1       rstudioapi_0.10    farver_2.0.1      
[41] generics_0.0.2     jsonlite_1.6       gtools_3.8.1       magrittr_1.5       Matrix_1.2-17     
[46] Rcpp_1.0.3         munsell_0.5.0      fansi_0.4.0        lifecycle_0.1.0    stringi_1.4.3     
[51] yaml_2.2.0         MASS_7.3-51.4      pkgbuild_1.0.6     gplots_3.0.1.1     grid_3.6.1        
[56] gdata_2.18.0       crayon_1.3.4       lattice_0.20-38    haven_2.2.0        splines_3.6.1     
[61] hms_0.5.2          zeallot_0.1.0      ps_1.3.0           pillar_1.4.2       pkgload_1.0.2     
[66] reprex_0.3.0       glue_1.3.1         remotes_2.1.1      BiocManager_1.30.9 modelr_0.1.5      
[71] vctrs_0.2.0        testthat_2.3.0     cellranger_1.1.0   gtable_0.3.0       assertthat_0.2.1  
[76] broom_0.5.4        viridisLite_0.3.0  memoise_1.1.0      ellipsis_0.3.0    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窍帝,隨后出現(xiàn)的幾起案子努潘,更是在濱河造成了極大的恐慌,老刑警劉巖坤学,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯坤,死亡現(xiàn)場離奇詭異,居然都是意外死亡深浮,警方通過查閱死者的電腦和手機(jī)压怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞苇,“玉大人菌瘫,你說我怎么就攤上這事〔伎ǎ” “怎么了突梦?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羽利。 經(jīng)常有香客問我宫患,道長,這世上最難降的妖魔是什么这弧? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任娃闲,我火速辦了婚禮,結(jié)果婚禮上匾浪,老公的妹妹穿的比我還像新娘皇帮。我一直安慰自己,他們只是感情好蛋辈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布属拾。 她就那樣靜靜地躺著将谊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渐白。 梳的紋絲不亂的頭發(fā)上尊浓,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音纯衍,去河邊找鬼栋齿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛襟诸,可吹牛的內(nèi)容都是我干的瓦堵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼歌亲,長吁一口氣:“原來是場噩夢啊……” “哼菇用!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陷揪,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芜茵,失蹤者是張志新(化名)和其女友劉穎忿薇,沒想到半個(gè)月后捂龄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漆诽,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亭畜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年扮休,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴鸵。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玷坠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劲藐,到底是詐尸還是另有隱情八堡,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布聘芜,位于F島的核電站兄渺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汰现。R本人自食惡果不足惜挂谍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞎饲。 院中可真熱鬧口叙,春花似錦、人聲如沸嗅战。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疟呐,卻和暖如春脚曾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萨醒。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工斟珊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人富纸。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓囤踩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晓褪。 傳聞我的和親對象是個(gè)殘疾皇子堵漱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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