使用WGCNA進(jìn)行meta-analysis

  • 鑒于大量的轉(zhuǎn)錄組數(shù)據(jù)壮锻,可能出現(xiàn)的一個問題是“如果A組和B組都進(jìn)行了轉(zhuǎn)錄組研究并報告了一些結(jié)果琐旁,這些結(jié)果的相容性如何?”目前基于轉(zhuǎn)錄組或芯片數(shù)據(jù)進(jìn)行meta-analysis的方法很多躯保,我們可以在數(shù)據(jù)庫中尋找大量類似的實驗結(jié)果用于meta-analysis旋膳,而WGCNA可以在轉(zhuǎn)錄組/芯片數(shù)據(jù)中構(gòu)建無標(biāo)度網(wǎng)絡(luò)并將基因的表達(dá)水平與樣本表型關(guān)聯(lián)起來,這在轉(zhuǎn)錄組分析中發(fā)揮了十分重要的作用途事,在這里我們可以使用WGCNA將兩組/兩組以上的數(shù)據(jù)聯(lián)合起來验懊,用于闡述不同實驗結(jié)果/不同物種間的基因表達(dá)模式的關(guān)聯(lián)
  • Miller JA, Horvath S, Geschwind DH. (2010) Divergence of human and mouse brain transcriptome highlights Alzheimer disease pathways. Proc Natl Acad Sci U S A. 2010 Jul 13;107(28):12698-703. 以下分析是基于該文章的精簡版
#首先安裝一些依賴包,這里有一些包年代久遠(yuǎn)可能會報錯
  install.packages(c("impute","dynamicTreeCut","qvalue","flashClust","Hmisc","WGCNA"))

隨后下載示例數(shù)據(jù)尸变,該數(shù)據(jù)包括4組樣本义图,分別是:

  • datExprA1 and datExprA2 – two data sets from the Illumina human ref-12 platform
  • datExprB1 and datExprB2 – data sets from the Illumina human ref-12 and Affymetrix HG-U133A platforms, respectively (datExprA1 and datExprB1 are the same).
  • probesI/A – probe set IDs for human ref-12 and HG-U133A platforms
  • genesI/A – gene symbols corresponding to probesI/A

數(shù)據(jù)預(yù)處理

首先篩選探針,進(jìn)行g(shù)ene_symbol的注釋以及初篩等操作

load("/path/metaAnalysisData.RData")

library(WGCNA) 
datExprB1g = (collapseRows(datExprB1,genesI,probesI))[[1]] 
datExprB2g = (collapseRows(datExprB2,genesA,probesA))[[1]]

#您需要將分析限制在兩個數(shù)據(jù)集中都表達(dá)的基因/探針上召烂。
commonProbesA = intersect (rownames(datExprA1),rownames(datExprA2)) 
datExprA1p = datExprA1[commonProbesA,] 
datExprA2p = datExprA2[commonProbesA,] 
commonGenesB = intersect (rownames(datExprB1g),rownames(datExprB2g)) 
datExprB1g = datExprB1g[commonGenesB,] 
datExprB2g = datExprB2g[commonGenesB,]

接下來我們需要評估數(shù)據(jù)集間的關(guān)聯(lián)碱工,以判斷這些數(shù)據(jù)可否進(jìn)行聯(lián)合分析,首先分別計算每個數(shù)據(jù)的的相容性如何?”目前基于轉(zhuǎn)錄組或芯片數(shù)據(jù)進(jìn)行meta-analysis的方法很多奏夫,我們可以在數(shù)據(jù)庫中尋找大量類似的實驗結(jié)果用于meta-analysis怕篷,而WGCNA可以在轉(zhuǎn)錄組/芯片數(shù)據(jù)中構(gòu)建無標(biāo)度網(wǎng)絡(luò)并將基因的表達(dá)水平與樣本表型關(guān)聯(lián)起來,這在轉(zhuǎn)錄組分析中發(fā)揮了十分重要的作用酗昼,在這里我們可以使用WGCNA將兩組/兩組以上的數(shù)據(jù)聯(lián)合起來廊谓,用于闡述不同實驗結(jié)果/不同物種間的基因表達(dá)模式的關(guān)聯(lián)

  • Miller JA, Horvath S, Geschwind DH. (2010) Divergence of human and mouse brain transcriptome highlights Alzheimer disease pathways. Proc Natl Acad Sci U S A. 2010 Jul 13;107(28):12698-703. 以下分析是基于該文章的精簡版
#首先安裝一些依賴包,這里有一些包年代久遠(yuǎn)可能會報錯
  install.packages(c("impute","dynamicTreeCut","qvalue","flashClust","Hmisc","WGCNA"))

數(shù)據(jù)預(yù)處理

首先篩選探針麻削,進(jìn)行g(shù)ene_symbol的注釋以及初篩等操作

load("/path/metaAnalysisData.RData")

library(WGCNA) 
library(flashClust)
datExprB1g = (collapseRows(datExprB1,genesI,probesI))[[1]] 
datExprB2g = (collapseRows(datExprB2,genesA,probesA))[[1]]

#您需要將分析限制在兩個數(shù)據(jù)集中都表達(dá)的基因/探針上蒸痹。
commonProbesA = intersect (rownames(datExprA1),rownames(datExprA2)) 
datExprA1p = datExprA1[commonProbesA,] 
datExprA2p = datExprA2[commonProbesA,] 
commonGenesB = intersect (rownames(datExprB1g),rownames(datExprB2g)) 
datExprB1g = datExprB1g[commonGenesB,] 
datExprB2g = datExprB2g[commonGenesB,]

接下來我們需要評估數(shù)據(jù)集間的關(guān)聯(lián),以判斷這些數(shù)據(jù)可否進(jìn)行聯(lián)合分析,首先分別計算每個節(jié)點的加權(quán)網(wǎng)絡(luò)連接度呛哟,隨后繪制相關(guān)性散點圖查看相關(guān)性與P值判斷數(shù)據(jù)是否可以聯(lián)合分析叠荠,B組數(shù)據(jù)由于來自不同的平臺,數(shù)據(jù)間的相關(guān)性比較低扫责,但是P值很顯著(P = 2.9e-84)我們也可以將其用于后續(xù)的分析

softPower = 10 
rankExprA1= rank(rowMeans(datExprA1p)) 
rankExprA2= rank(rowMeans(datExprA2p)) 
random5000= sample(commonProbesA,5000) 
rankConnA1= rank(softConnectivity(t(datExprA1p[random5000,]),type="signed",power=softPower)) 
rankConnA2= rank(softConnectivity(t(datExprA2p[random5000,]),type="signed",power=softPower)) 
rankExprB1= rank(rowMeans(datExprB1g)) 
rankExprB2= rank(rowMeans(datExprB2g)) 
random5000= sample(commonGenesB,5000) 
rankConnB1= rank(softConnectivity(t(datExprB1g[random5000,]),type="signed",power=softPower)) 
rankConnB2= rank(softConnectivity(t(datExprB2g[random5000,]),type="signed",power=softPower))

par(mfrow=c(2,2)) 
verboseScatterplot(rankExprA1,rankExprA2, xlab="Ranked Expression (A1)", 
ylab="Ranked Expression (A2)") 
verboseScatterplot(rankConnA1,rankConnA2, xlab="Ranked Connectivity (A1)", 
ylab="Ranked Connectivity (A2)") 
verboseScatterplot(rankExprB1,rankExprB2, xlab="Ranked Expression (B1)", 
ylab="Ranked Expression (B2)") 
verboseScatterplot(rankConnB1,rankConnB2, xlab="Ranked Connectivity (B1)", 
ylab="Ranked Connectivity (B2)")

構(gòu)建共表達(dá)網(wǎng)絡(luò)

出于計算的原因和簡單性榛鼎,我們首先選擇數(shù)據(jù)集A1中表達(dá)量最高的5000個探針(通常不會這樣做),然后每個基因只保留1個探針(如上所述)鳖孤,總共保留4746個基因借帘。

keepGenesExpr = rank(-rowMeans(datExprA1p))<=5000 
datExprA1g = datExprA1p[keepGenesExpr,] 
datExprA2g = datExprA2p[keepGenesExpr,] 
keepGenesDups = (collapseRows(datExprA1g,genesI,probesI))[[2]] 
datExprA1g = datExprA1g[keepGenesDups[,2],] 
datExprA2g = datExprA2g[keepGenesDups[,2],] 
rownames(datExprA1g)<-rownames(datExprA2g)<-keepGenesDups[,1]

隨后計算連接度并構(gòu)建TOM矩陣

adjacencyA1 = adjacency(t(datExprA1g),power=softPower,type="signed"); 
diag(adjacencyA1)=0 
dissTOMA1 = 1-TOMsimilarity(adjacencyA1, TOMType="signed") 
geneTreeA1 = flashClust(as.dist(dissTOMA1), method="average") 
adjacencyA2 = adjacency(t(datExprA2g),power=softPower,type="signed"); 
diag(adjacencyA2)=0 
dissTOMA2 = 1-TOMsimilarity(adjacencyA2, TOMType="signed") 
geneTreeA2 = flashClust(as.dist(dissTOMA2), method="average")

#繪制基因?qū)哟尉垲悩?par(mfrow=c(1,2)) 
plot(geneTreeA1,xlab="",sub="",main="Gene clustering on TOM-based dissimilarity (A1)", 
labels=FALSE,hang=0.04); 
plot(geneTreeA2,xlab="",sub="",main="Gene clustering on TOM-based dissimilarity (A2)", 
labels=FALSE,hang=0.04);

接下來,我們將根據(jù)數(shù)據(jù)集A1確定模塊(在實際情況下淌铐,我們通常會構(gòu)建對照數(shù)據(jù)集的模塊作為參照)。我們使用此代碼自動顯示四個不同的模塊拆分蔫缸,可以從中進(jìn)行選擇腿准。

mColorh=NULL 
for (ds in 0:3){ 
 tree = cutreeHybrid(dendro = geneTreeA1, pamStage=FALSE, 
 minClusterSize = (30-3*ds), cutHeight = 0.99, 
 deepSplit = ds, distM = dissTOMA1) 
 mColorh=cbind(mColorh,labels2colors(tree$labels)); 
} 
#pdf("Module_choices.pdf", height=10,width=25); 
plotDendroAndColors(geneTreeA1, mColorh, paste("dpSplt =",0:3), main = "",dendroLabels=FALSE); 
#dev.off() 
modulesA1 = mColorh[,1] # (Chosen based on plot below)
#詳細(xì)過程我們需要參照cutreeHybrid這個函數(shù),我們提供了4個整數(shù)。使用四個等級的群集拆分敏感度的粗略控制吐葱。值越高街望,將產(chǎn)生越來越多的小簇。
  • 在這里選擇使用deepsplit=0(頂行)弟跑,這樣就會有少量的大模塊灾前。根據(jù)分析的目的,有時最好選擇更多的小模塊孟辑。在這種情況下哎甲,將選擇1-3的深度分割值。

  • 接下來饲嗽,我們計算每個模塊的主成分炭玫。第一個PC被稱為模塊的特征基因(module eigengene [ME]),表示模塊中所有基因的最大方差百分比貌虾。換句話說吞加,如果我們展示模塊X的ME做某事,那么模塊X中的大多數(shù)基因也很有可能做同樣的事情尽狠。

PCs1A = moduleEigengenes(t(datExprA1g), colors=modulesA1)
ME_1A = PCs1A$eigengenes
distPC1A = 1-abs(cor(ME_1A,use="p"))
distPC1A = ifelse(is.na(distPC1A), 0, distPC1A)
pcTree1A = hclust(as.dist(distPC1A),method="a")
MDS_1A = cmdscale(as.dist(distPC1A),2)
colorsA1 = names(table(modulesA1))

#繪圖展示模塊之間關(guān)聯(lián)程度
plot(pcTree1A, xlab="",ylab="",main="",sub="")
plot(MDS_1A, col= colorsA1, main="MDS plot", cex=2, pch=19)
ordergenes = geneTreeA1$order
plot.mat(scale(log(datExprA1g[ordergenes,])) , rlabels= modulesA1[ordergenes], clabels=
           colnames(datExprA1g), rcols=modulesA1[ordergenes]) 
for (which.module in names(table(modulesA1))){
  ME = ME_1A[, paste("ME",which.module, sep="")]
  barplot(ME, col=which.module, main="", cex.main=2,
          ylab="eigengene expression",xlab="array sample")
}; 

#現(xiàn)在我們已經(jīng)有了所有的WGCNA變量和模塊定義衔憨,我們可以開始評估網(wǎng)絡(luò)A1中#的模塊在網(wǎng)絡(luò)A2中的情況。作為定性評估袄膏,我們將A1中的模塊強加給數(shù)據(jù)集A2
#的網(wǎng)絡(luò)践图,然后繪制出結(jié)果網(wǎng)絡(luò)。
plotDendroAndColors(geneTreeA1, modulesA1, "Modules", dendroLabels=FALSE, hang=0.03, addGuide=TRUE, 
guideHang=0.05, main="Gene dendrogram and module colors (A1)") 
plotDendroAndColors(geneTreeA2, modulesA1, "Modules", dendroLabels=FALSE, hang=0.03, addGuide=TRUE, 
guideHang=0.05, main="Gene dendrogram and module colors (A2)")
  • 我們可以從這些模塊標(biāo)簽在A2的情況發(fā)現(xiàn)哩陕,它們具有非常好的保存性平项。需要注意的是,在第二個數(shù)據(jù)集中通常不可能看到明顯的模型標(biāo)簽分組悍及,即使存在顯著的數(shù)據(jù)關(guān)聯(lián)以及模塊保留能力闽瓢。

  • 為了量化這個結(jié)果,我們利用WGCNA庫中內(nèi)置的另一個函數(shù):modulePreservation心赶。此函數(shù)使用多種策略評估一項研究中的模塊在另一項研究中的保存情況扣讼,并輸出一個Z分?jǐn)?shù)摘要。

  • 一般來說缨叫,Zsummary.pres的值越高椭符,模塊在數(shù)據(jù)集之間的保存程度越高:5<Z<10表示中度保存,而Z>10表示高度保存耻姥∠郏灰色模塊包含未聚類的基因,而金色模塊包含隨機基因琐簇。一般來說蒸健,這些模塊的Z分?jǐn)?shù)應(yīng)該比大多數(shù)其他模塊低座享。在這種情況下,我們發(fā)現(xiàn)所有模塊都保存得很好似忧。

multiExpr = list(A1=list(data=t(datExprA1g)),A2=list(data=t(datExprA2g))) 
multiColor = list(A1 = modulesA1) 
mp=modulePreservation(multiExpr,multiColor,referenceNetworks=1,verbose=3,networkType="signed", 
nPermutations=30,maxGoldModuleSize=100,maxModuleSize=400) 
stats = mp$preservation$Z$ref.A1$inColumnsAlsoPresentIn.A2 
stats[order(-stats[,2]),c(1:2)]

計算模塊中的基因與ME的關(guān)聯(lián)程度

Module membership (kME) 是一個有用的值渣叛,因為它可以用來測量每個基因和每個ME之間的相關(guān)性,因此即使是最初沒有分配到模塊的基因也可以包含在網(wǎng)絡(luò)間的比較中盯捌。

geneModuleMembership1 = signedKME(t(datExprA1g), ME_1A) 
colnames(geneModuleMembership1)=paste("PC",colorsA1,".cor",sep=""); 
MMPvalue1=corPvalueStudent(as.matrix(geneModuleMembership1),dim(datExprA1g)[[2]]); 
colnames(MMPvalue1)=paste("PC",colorsA1,".pval",sep=""); 
Gene = rownames(datExprA1g) 
kMEtable1 = cbind(Gene,Gene,modulesA1) 
for (i in 1:length(colorsA1)) 
 kMEtable1 = cbind(kMEtable1, geneModuleMembership1[,i], MMPvalue1[,i]) 
colnames(kMEtable1)=c("PSID","Gene","Module",sort(c(colnames(geneModuleMembership1), 
colnames(MMPvalue1))))

#現(xiàn)在對A2重復(fù)上述步驟淳衙,使用來自A1的模塊賦值來確定A2中的kME值。
# First calculate MEs for A2, since we haven't done that yet 
PCs2A = moduleEigengenes(t(datExprA2g), colors=modulesA1) 
ME_2A = PCs2A$eigengenes 
geneModuleMembership2 = signedKME(t(datExprA2g), ME_2A) 
colnames(geneModuleMembership1)=paste("PC",colorsA1,".cor",sep=""); 
MMPvalue2=corPvalueStudent(as.matrix(geneModuleMembership2),dim(datExprA2g)[[2]]); 
colnames(MMPvalue2)=paste("PC",colorsA1,".pval",sep=""); 
kMEtable2 = cbind(Gene,Gene,modulesA1) 
for (i in 1:length(colorsA1)) 
 kMEtable2 = cbind(kMEtable2, geneModuleMembership2[,i], MMPvalue2[,i]) 
colnames(kMEtable2)=colnames(kMEtable1)
  • 我們首先要做的是將A1中每個基因的kME值與A2中每個基因相應(yīng)的kME值進(jìn)行比較饺著。具有高相關(guān)性的點的模塊被高度保留箫攀。下面是所有基因(左)和被分配進(jìn)該模塊的基因子集(右)創(chuàng)建這些圖的示例圖像。
  • 我們可以做的第二件事是通過確定哪些基因在兩個網(wǎng)絡(luò)中都具有極高的kME值來確定哪些基因是兩個網(wǎng)絡(luò)中的樞紐瓶籽。
#pdf("all_kMEtable2_vs_kMEtable1.pdf",height=8,width=8) 
for (c in 1:length(colorsA1)){ 
 verboseScatterplot(geneModuleMembership2[,c],geneModuleMembership1[,c],main=colorsA1[c], 
 xlab="kME in A2",ylab="kME in A1") 
}; 
#pdf("inModule_kMEtable2_vs_kMEtable1.pdf",height=8,width=8) 
for (c in 1:length(colorsA1)){ 
 inMod = modulesA1== colorsA1[c] 
 verboseScatterplot(geneModuleMembership2[inMod,c],geneModuleMembership1[inMod,c],main=colorsA1[c], 
 xlab="kME in A2",ylab="kME in A1") 
}; 

topGenesKME = NULL 
for (c in 1:length(colorsA1)){ 
 kMErank1 = rank(-geneModuleMembership1[,c]) 
 kMErank2 = rank(-geneModuleMembership2[,c]) 
 maxKMErank = rank(apply(cbind(kMErank1,kMErank2+.00001),1,max)) 
 topGenesKME = cbind(topGenesKME,Gene[maxKMErank<=10]) 
}; 
colnames(topGenesKME) = colorsA1

這兩種類型的散點圖傳達(dá)了相似但不完全相同的信息匠童。使用所有基因(左)可以包含所有正相關(guān)和負(fù)相關(guān)的基因,但通常也包含很多噪聲(盡管在本例中沒有)塑顺。只使用模塊內(nèi)基因(右)是評估hub基因在不同數(shù)據(jù)集間的保守程度:如果這些基因顯示出集合間的相關(guān)性汤求,那么位于圖右上角的基因很可能是數(shù)據(jù)集之間的公共hub基因。(Hub基因是與MEs和模塊內(nèi)高連通性有顯著相關(guān)性的基因)

注釋模塊以及后續(xù)分析

為了可視化生成的網(wǎng)絡(luò)模塊严拒,我們可以從網(wǎng)絡(luò)輸出數(shù)據(jù)導(dǎo)入VisANT扬绪,VisANT是一個獨立的可視化java程序,可在http://VisANT.bu.edu/上獲得裤唠。VisANT可以讓你直觀地看到一個模塊中的中心基因挤牛,是大多數(shù)人用來制作模塊圖片的程序。關(guān)于如何使用VisANT的教程可以在網(wǎng)站上找到种蘸。我們可以使用作者封裝的代碼提取模塊中的基因用于VisANT的輸入文件

source("tutorialFunctions.R") 
for (co in colorsA1[colorsA1!="grey"])
 visantPrepOverall(modulesA1, co, t(datExprA1g), rownames(datExprA1g), 500, softPower, TRUE)

for (co in colorsA1[colorsA1!="grey"]) 
 visantPrepOverall(modulesA1, co, t(datExprA2g), rownames(datExprA2g), 500, softPower, TRUE)
  • 這個函數(shù)會將很多文件輸出到當(dāng)前目錄中墓赴,每個模塊都有兩個文件:
    1) <module>_connectivityOverall.csv:此文件包含給定模塊中從最高到最低模塊內(nèi)連接(kin)排序的所有基因及其平均表達(dá)的列表。所以排在第一位的基因是中樞基因航瞭。
    2) <module>_visantOverall.csv:此文件包含VisANT所需的所有輸入诫硕。注意,只有前五列應(yīng)該復(fù)制到VisANT中刊侯。前兩列表示模塊中拓?fù)渲丿B度最高的基因(第5列)章办。第3列必須是“0”,第4列是要繪制的線的顏色(“M1002”是橙色)

  • 通過該軟件我們可以查看不同數(shù)據(jù)之間不同的表達(dá)模式滨彻,該示例中我們可以很清楚的發(fā)現(xiàn)SCAMP5是A1特異表達(dá)的藕届,我們可以選擇這樣的基因進(jìn)行后續(xù)的分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亭饵,隨后出現(xiàn)的幾起案子休偶,更是在濱河造成了極大的恐慌,老刑警劉巖辜羊,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椅贱,死亡現(xiàn)場離奇詭異懂算,居然都是意外死亡,警方通過查閱死者的電腦和手機庇麦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喜德,“玉大人山橄,你說我怎么就攤上這事∩崦酰” “怎么了航棱?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長萌衬。 經(jīng)常有香客問我饮醇,道長,這世上最難降的妖魔是什么秕豫? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任朴艰,我火速辦了婚禮,結(jié)果婚禮上混移,老公的妹妹穿的比我還像新娘祠墅。我一直安慰自己,他們只是感情好歌径,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布毁嗦。 她就那樣靜靜地躺著,像睡著了一般回铛。 火紅的嫁衣襯著肌膚如雪狗准。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天茵肃,我揣著相機與錄音腔长,去河邊找鬼。 笑死免姿,一個胖子當(dāng)著我的面吹牛饼酿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胚膊,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼故俐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了紊婉?” 一聲冷哼從身側(cè)響起药版,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喻犁,沒想到半個月后槽片,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體何缓,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年还栓,在試婚紗的時候發(fā)現(xiàn)自己被綠了碌廓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剩盒,死狀恐怖谷婆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辽聊,我是刑警寧澤纪挎,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站跟匆,受9級特大地震影響异袄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玛臂,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一烤蜕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垢揩,春花似錦玖绿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锋勺,卻和暖如春蚀瘸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庶橱。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工贮勃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苏章。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓寂嘉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枫绅。 傳聞我的和親對象是個殘疾皇子泉孩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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