富集分析后取基因

文章是:Identification of ankylosing spondylitis-associated genes by expression profiling ,数据集是GSE25101。

文章中没有给出logFC的阈值,但是最后得到的差异基因中74个上调,9个下调,所以我们可以自己设置阈值,是得到这样的基因数目,然后得到的差异基因再应用于后面富集分析中d

image-20191205233729390

如上图所示,作者得到的13个在某些通路中(上图中黄色标注中间的部分)有富集到的基因如下图所示,所以我们需要做富集分析,得到有统计学意义的基因并和原文比较。

image-20191205180858135

代码如下,其中下载和注释都是用的老大的新写的包哦,如下:

GEO数据库中国区镜像横空出世

第一个万能芯片探针ID注释平台R包

第二个万能芯片探针ID注释平台R包

第三个万能芯片探针ID注释平台R包

代码参考如下

library(devtools)
install_github("jmzeng1314/GEOmirror")
library(GEOmirror)
geoChina('GSE25101')
load('GSE25101_eSet.Rdata')
a=gset[[1]]
e=exprs(a)
p=pData(a)
gpl=a@annotation
gpl
#install_github("jmzeng1314/idmap1")
library(idmap1)
ids=getIDs(gpl)
group_list=c(rep('normal',16),rep('AS',16))
probe2gene=ids
probes_expr=e
filterEM <- function(probes_expr,probe2gene){
  probe2gene <- probe2gene[probe2gene$probe_id %in% rownames(probes_expr),]
  probes_expr <- probes_expr[match(probe2gene$probe_id,rownames(probes_expr)),]
}
genes_expr=filterEM(probes_expr,probe2gene)

boxplot(genes_expr)
library(limma)
design <- model.matrix(~0+factor(group_list))
colnames(design)=levels(factor(group_list))
head(design)
exprSet=genes_expr
rownames(design)=colnames(exprSet)
design
contrast.matrix<-makeContrasts("AS-normal",
                               levels = design)
contrast.matrix ##这个矩阵声明,我们要把 Tumor 组跟 Normal 进行差异分析比较
colnames(design)
deg = function(exprSet,design,contrast.matrix){
  ##step1
  fit <- lmFit(exprSet,design)
  ##step2
  fit2 <- contrasts.fit(fit, contrast.matrix) 
  ##这一步很重要,大家可以自行看看效果
  
  fit2 <- eBayes(fit2)  ## default no trend !!!
  ##eBayes() with trend=TRUE
  ##step3
  tempOutput = topTable(fit2, coef=1, n=Inf)
  nrDEG = na.omit(tempOutput) 
  #write.csv(nrDEG2,"limma_notrend.results.csv",quote = F)
  head(nrDEG)
  return(nrDEG)
}
deg = deg(exprSet,design,contrast.matrix)
DEG <- deg
DEG$probe_id = rownames(DEG)
merge_DEG <- merge(DEG,probe2gene,by='probe_id')
save(merge_DEG,file = 'merge_DEG.Rdata')
## for volcano plot
df=merge_DEG
attach(df)
df$v= -log10(P.Value)
mean(abs(df$logFC))+2*sd(abs(df$logFC))
df$g=ifelse(df$P.Value>0.05,'stable',
            ifelse( df$logFC >0.6,'up',
                    ifelse( df$logFC < -0.,'down','stable') )
)

table(df$g)
df$name=rownames(df)
head(df)
ggpubr::ggscatter(df, x = "logFC", y = "v", color = "g",size = 0.5,
                  label = "name", repel = T,
                  label.select =head(df$symbol),
                  palette = c("#00AFBB", "#E7B800", "#FC4E07") )
detach(df)


# x=merge_DEG$logFC
# names(x)=rownames(DEG)
# cg=c(names(head(sort(x),100)),
#      names(tail(sort(x),100)))
# cg
# library(pheatmap)
# n=t(scale(t(genes_expr[cg,])))
# n[n>2]=2
# n[n< -2]= -2
# n[1:4,1:4]
# ac=data.frame(groupList=groupList)
# rownames(ac)=colnames(n)  
# pheatmap(n,show_colnames =F,show_rownames = F,
#          annotation_col=ac) 

# DEG['ILMN_1757298',]
# DEG['ILMN_1681591',]
# boxplot(as.numeric(genes_expr['ILMN_1757298',])~groupList)

library(ggplot2)
library(clusterProfiler) 
tmp_merge_DEG <- bitr(merge_DEG$symbol, fromType="SYMBOL", 
            toType="ENTREZID", 
            OrgDb="org.Hs.eg.db")
merge_DEG_new <- merge(merge_DEG,tmp_merge_DEG,by.x='symbol',by.y='SYMBOL')
mdn <- merge_DEG_new
mdn$change = ifelse(mdn$adj.P.Val < 0.05 & abs(mdn$logFC) > 0.5,
                   ifelse(mdn$logFC > 0.5 ,'UP','DOWN'),'NOT')

save(mdn,file = 'mdn.Rdata')
load('mdn.Rdata') 
gene_up= mdn[mdn$change == 'UP','ENTREZID'] 
gene_down=mdn[mdn$change == 'DOWN','ENTREZID'] 
gene_diff=c(gene_up,gene_down)
gene_all=as.character(mdn[ ,'ENTREZID'] )


## KEGG pathway analysis
### 做KEGG数据集超几何分布检验分析,重点在结果的可视化及生物学意义的理解。
if(F){
  ###   over-representation test
  kk.up <- enrichKEGG(gene         = gene_up,
                      organism     = 'hsa',
                      universe     = gene_all,
                      pvalueCutoff = 0.9,
                      qvalueCutoff =0.9)
  head(kk.up)[,1:6]
  dotplot(kk.up );ggsave('kk.up.dotplot.png')
  kk.down <- enrichKEGG(gene         =  gene_down,
                        organism     = 'hsa',
                        universe     = gene_all,
                        pvalueCutoff = 0.9,
                        qvalueCutoff =0.9)
  head(kk.down)[,1:6]
  dotplot(kk.down );ggsave('kk.down.dotplot.png')
  kk.diff <- enrichKEGG(gene         = gene_diff,
                        organism     = 'hsa',
                        pvalueCutoff = 0.05)
  head(kk.diff)[,1:6]
  dotplot(kk.diff );ggsave('kk.diff.dotplot.png')
  
  kegg_diff_dt <- as.data.frame(kk.diff)
  kegg_down_dt <- as.data.frame(kk.down)
  kegg_up_dt <- as.data.frame(kk.up)
  down_kegg<-kegg_down_dt[kegg_down_dt$pvalue<0.05,];down_kegg$group=-1
  up_kegg<-kegg_up_dt[kegg_up_dt$pvalue<0.05,];up_kegg$group=1
  source('functions.R')
  g_kegg=kegg_plot(up_kegg,down_kegg)
  print(g_kegg)
  
  ggsave(g_kegg,filename = 'kegg_up_down.png')

  # ###  GSEA 
  # kk_gse <- gseKEGG(geneList     = geneList,
  #                   organism     = 'hsa',
  #                   nPerm        = 1000,
  #                   minGSSize    = 120,
  #                   pvalueCutoff = 0.9,
  #                   verbose      = FALSE)
  # head(kk_gse)[,1:6]
  # gseaplot(kk_gse, geneSetID = rownames(kk_gse[1,]))
  # 
  # down_kegg<-kk_gse[kk_gse$pvalue<0.05 & kk_gse$enrichmentScore < 0,];down_kegg$group=-1
  # up_kegg<-kk_gse[kk_gse$pvalue<0.05 & kk_gse$enrichmentScore > 0,];up_kegg$group=1
  # 
  # g_kegg=kegg_plot(up_kegg,down_kegg)
  # print(g_kegg)
  # ggsave(g_kegg,filename = 'kegg_up_down_gsea.png')
  # 
  # 
}


### GO database analysis 
### 做GO数据集超几何分布检验分析,重点在结果的可视化及生物学意义的理解。
library(org.Hs.eg.db)
 {
  g_list=list(gene_up=gene_up,
              gene_down=gene_down,
              gene_diff=gene_diff)
  
  if(T){
    go_enrich_results <- lapply( g_list , function(gene) {
      lapply( c('BP','MF','CC') , function(ont) {
        cat(paste('Now process ',ont ))
        ego <- enrichGO(gene          = gene,
                        universe      = gene_all,
                        OrgDb         = org.Hs.eg.db,
                        ont           = ont ,
                        pAdjustMethod = "BH",
                        pvalueCutoff  = 0.99,
                        qvalueCutoff  = 0.99,
                        readable      = TRUE)
        
        print( head(ego) )
        return(ego)
      })
    })
    save(go_enrich_results,file = 'go_enrich_results.Rdata')
    
  }
}

class(go_enrich_results)

#下面这部分在后面会一一再结合出图显示
dotplot(go_enrich_results$gene_up[[1]])
dotplot(go_enrich_results$gene_up[[2]])
dotplot(go_enrich_results$gene_up[[3]])
gene_up_CC <- as.data.frame(go_enrich_results$gene_up[[3]])
dotplot(go_enrich_results$gene_down[[1]])
gene_down_MF <- as.data.frame(go_enrich_results$gene_down[[1]])
dotplot(go_enrich_results$gene_down[[2]])
dotplot(go_enrich_results$gene_down[[3]])
gene_down_CC <- as.data.frame(go_enrich_results$gene_down[[3]])
  

获得的kegg图如下,是将kegg_up和kegg_down在一张图片中展示的,但是此处的红色和蓝色并不是同后面的dotplot图的红色、蓝色的意义一样,后面的红色代表p值小,蓝色代表p值大,而下图中的红色仅仅是代表上面一步在做enrichKEGG后,又对得到的kk.downkk.up进行了pvalue<0.05的筛选 ,得到的down_keggup_kegg合起来作出的图,所以红色代表上调基因富集到哪些通路,蓝色代表下调基因富集到哪些通路。

image-20191205171752370

结下来在kegg数据库中提取基因,就是在down_keggup_kegg这两个数据框中提取基因。

  • down_kegg
`down_kegg`
> x <- as.data.frame(down_kegg$geneID)
> apply(x,1,function(x){str_split(x,'/',simplify = T)})
[[1]]
     [,1]  [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "522" "1349" "4709" "4724" "7381" "7388"

[[2]]
     [,1]  [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "522" "1349" "4709" "4724" "7381" "7388"

[[3]]
     [,1]  [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "522" "1349" "4709" "4724" "7381" "7388"

[[4]]
     [,1]  [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "522" "1349" "4709" "4724" "7381" "7388"

[[5]]
     [,1]  [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "522" "1349" "4709" "4724" "7381" "7388"

[[6]]
     [,1]   [,2]   [,3]   [,4]   [,5]  
[1,] "1349" "4709" "4724" "7381" "7388"

[[7]]
     [,1]    [,2]    [,3]    [,4]   [,5]  
[1,] "29093" "51023" "51121" "6173" "6229"

[[8]]
     [,1]   [,2]   [,3]  
[1,] "1349" "7381" "7388"

[[9]]
     [,1]    [,2]    [,3]    [,4]   
[1,] "27258" "51639" "10569" "25949"

[[10]]
     [,1]   [,2]   [,3]  
[1,] "2791" "4709" "4724"

[[11]]
     [,1]   [,2]  
[1,] "5685" "7979"
> lapply(x,function(x){str_split(x,'/',simplify = T)})
$`down_kegg$geneID`
      [,1]    [,2]    [,3]    [,4]    [,5]   [,6]  
 [1,] "522"   "1349"  "4709"  "4724"  "7381" "7388"
 [2,] "522"   "1349"  "4709"  "4724"  "7381" "7388"
 [3,] "522"   "1349"  "4709"  "4724"  "7381" "7388"
 [4,] "522"   "1349"  "4709"  "4724"  "7381" "7388"
 [5,] "522"   "1349"  "4709"  "4724"  "7381" "7388"
 [6,] "1349"  "4709"  "4724"  "7381"  "7388" ""    
 [7,] "29093" "51023" "51121" "6173"  "6229" ""    
 [8,] "1349"  "7381"  "7388"  ""      ""     ""    
 [9,] "27258" "51639" "10569" "25949" ""     ""    
[10,] "2791"  "4709"  "4724"  ""      ""     ""    
[11,] "5685"  "7979"  ""      ""      ""     ""    

tmp <- as.data.frame(lapply(x,function(x){str_split(x,'/',simplify = T)})[[1]])
image-20191205201346084
> tmp <- as.data.frame(lapply(x,function(x){str_split(x,'/',simplify = T)})[[1]])
> unique(unlist(apply(tmp,2,unique)))
 [1] "522"   "1349"  "29093" "27258" "2791"  "5685"  "4709"  "51023"
 [9] "7381"  "51639" "7979"  "4724"  "51121" "7388"  "10569" ""     
[17] "6173"  "25949" "6229" 
> unique(unlist(apply(tmp,2,unique)))[-16]
 [1] "522"   "1349"  "29093" "27258" "2791"  "5685"  "4709"  "51023"
 [9] "7381"  "51639" "7979"  "4724"  "51121" "7388"  "10569" "6173" 
[17] "25949" "6229" 

上面得到的是geneID,把这个geneIDmdnENTREZID是一个,在这个mdn对应后得到基因名symbol.

tmp1 <- unique(unlist(apply(tmp,2,unique)))[-16]
tmp2 <- mdn[match(tmp1,mdn$ENTREZID),]$symbol
> tmp2
 [1] "ATP5PF"  "COX7B"   "MRPL22"  "LSM3"    "GNG11"   "PSMA4"   "NDUFB3" 
 [8] "MRPS18C" "UQCRB"   "SF3B6"   "SEM1"    "NDUFS4"  "RPL26L1" "UQCRH"  
[15] "SLU7"    "RPL36A"  "SYF2"    "RPS24"

上面是得到down_kegg的基因

  • up_kegg
`up_kegg`

同上面获得down_kegg的步骤差不多,最后得到down_kegg的基因

> tmp <- up_kegg$geneID
> tmp
[1] "994/1786/2033" "2033/5770"     "994/2033"      "64919/3695"   
> str_split(tmp,'/',simplify = T)
     [,1]    [,2]   [,3]  
[1,] "994"   "1786" "2033"
[2,] "2033"  "5770" ""    
[3,] "994"   "2033" ""    
[4,] "64919" "3695" ""    
> str_split(tmp,'/')
[[1]]
[1] "994"  "1786" "2033"

[[2]]
[1] "2033" "5770"

[[3]]
[1] "994"  "2033"

[[4]]
[1] "64919" "3695" 

> unlist(str_split(tmp,'/'))
[1] "994"   "1786"  "2033"  "2033"  "5770"  "994"   "2033"  "64919" "3695" 
> mdn[match(unlist(str_split(tmp,'/')),mdn$ENTREZID),]$symbol
[1] "CDC25B" "DNMT1"  "EP300"  "EP300"  "PTPN1"  "CDC25B" "EP300"  "BCL11B"
[9] "ITGB7" 
> unique(mdn[match(unlist(str_split(tmp,'/')),mdn$ENTREZID),]$symbol)
[1] "CDC25B" "DNMT1"  "EP300"  "PTPN1"  "BCL11B" "ITGB7" 

上面是得到up_kegg的基因。

接下来的想法就是gene_up和gene_down在GO数据库中的三种通路中是否富集('BP','MF','CC')分别画气泡图。对于p.adjust<0.05的某个通路,就新生成个数据框,作为后面提取基因用。

gene_up在GO三种通路中

dotplot(go_enrich_results$gene_up[[1]])
image-20191205181806556
dotplot(go_enrich_results$gene_up[[2]])
image-20191205181819632
dotplot(go_enrich_results$gene_up[[3]])
image-20191205181836616
gene_up_CC <- as.data.frame(go_enrich_results$gene_up[[3]])#新生成gene_up_CC数据框
image-20191205182107233

gene_down在GO三种通路中

dotplot(go_enrich_results$gene_down[[1]])
image-20191205182235326
gene_down_MF <- as.data.frame(go_enrich_results$gene_down[[1]])#新生成gene_down_MF数据框
image-20191205183539544
dotplot(go_enrich_results$gene_down[[2]])
image-20191205183722991
dotplot(go_enrich_results$gene_down[[3]])
image-20191205183701987
gene_down_CC <- as.data.frame(go_enrich_results$gene_down[[3]])#新生成gene_down_CC数据框
image-20191205183908023

GO通路中富集的基因,以p.adjust<0.5为临界值

  • gene_up_CC的基因获得如下
> gene_up_CC[1,]$geneID
[1] "CLSTN1/CX3CR1/DOCK10/HNRNPR/MAPK8IP3"
> unlist(str_split(gene_up_CC[1,]$geneID,'/'))
[1] "CLSTN1"   "CX3CR1"   "DOCK10"   "HNRNPR"   "MAPK8IP3"
  • gene_down_MF的基因获得如下
x <- gene_down_MF[gene_down_MF$p.adjust<0.05,]
x1 <- x$geneID
x2 <- str_split(x1,'/',simplify=T)
x2
> apply(x2,2,function(x){unique(x)})
[[1]]
[1] "ATP5PF"    "COX7B"     "ATP5F1EP2"

[[2]]
[1] "COX7B"  "NDUFB3" "ATP5PF"

[[3]]
[1] "NDUFB3" "NDUFS4" "COX7B" 

[[4]]
[1] "NDUFS4" "UQCRB"  "NDUFB3"

[[5]]
[1] "UQCRB"  "UQCRH"  "NDUFS4"

[[6]]
[1] "UQCRH" ""      "UQCRB"

[[7]]
[1] ""      "UQCRH"
> unique(lapply(x2,function(x){unique(x)}))
[[1]]
[1] "ATP5PF"

[[2]]
[1] "COX7B"

[[3]]
[1] "ATP5F1EP2"

[[4]]
[1] "NDUFB3"

[[5]]
[1] "NDUFS4"

[[6]]
[1] "UQCRB"

[[7]]
[1] "UQCRH"

[[8]]
[1] ""
> unlist(unique(lapply(x2,function(x){unique(x)})))
[1] "ATP5PF"    "COX7B"     "ATP5F1EP2" "NDUFB3"    "NDUFS4"    "UQCRB"    
[7] "UQCRH"     ""      
> unlist(unique(lapply(x2,function(x){unique(x)})))[-8]
[1] "ATP5PF"    "COX7B"     "ATP5F1EP2" "NDUFB3"    "NDUFS4"    "UQCRB"    
[7] "UQCRH"    
  • gene_down_CC的基因获得如下
 x <- gene_down_CC[gene_down_CC$p.adjust<0.05,]
 x1 <- x$geneID
 x2 <- str_split(x1,'/',simplify=T)
image-20191205194012561

中间过程同上,最后是

> unlist(unique(lapply(x2,function(x){unique(x)})))
 [1] "COX7B"     "ATP5F1EP2" "CETN3"     "NDUFB3"    "ATP5PF"   
 [6] "ENY2"      "NDUFS4"    "MRPL22"    ""          "UQCRB"    
[11] "MRPS18C"   "UQCRH"  
> unlist(unique(lapply(x2,function(x){unique(x)})))[-9]
 [1] "COX7B"     "ATP5F1EP2" "CETN3"     "NDUFB3"    "ATP5PF"   
 [6] "ENY2"      "NDUFS4"    "MRPL22"    "UQCRB"     "MRPS18C"  
[11] "UQCRH"    

综上,获得的KEGG和GO的基因如下

KEGG获得的所有富集的基因如下:

 [1] "ATP5PF"  "COX7B"   "MRPL22"  "LSM3"    "GNG11"   "PSMA4"   "NDUFB3" 
 [8] "MRPS18C" "UQCRB"   "SF3B6"   "SEM1"    "NDUFS4"  "RPL26L1" "UQCRH"  
[15] "SLU7"    "RPL36A"  "SYF2"    "RPS24"
[1] "CDC25B" "DNMT1"  "EP300"  "PTPN1"  "BCL11B" "ITGB7" 

GO获得的所有富集的基因如下:

[1] "CLSTN1"   "CX3CR1"   "DOCK10"   "HNRNPR"   "MAPK8IP3"
[1] "ATP5PF"    "COX7B"     "ATP5F1EP2" "NDUFB3"    "NDUFS4"    "UQCRB"    
[7] "UQCRH" 
[1] "COX7B"     "ATP5F1EP2" "CETN3"     "NDUFB3"    "ATP5PF"   
[6] "ENY2"      "NDUFS4"    "MRPL22"    "UQCRB"     "MRPS18C"  
[11] "UQCRH"    

新建一个.txt文档,长如下图

image-20191205211610279
#读进去R里
a <- read.table('genelist.txt',sep = '\t')

得到如下图

image-20191205211459471
> a1 <-apply(a,1,function(x){gsub('\\[[0-9]*\\]','',x)})
 [1] "  ATP5PF  COX7B   MRPL22  LSM3    GNG11   PSMA4   NDUFB3 "   
 [2] "  MRPS18C UQCRB   SF3B6   SEM1    NDUFS4  RPL26L1 UQCRH  "   
 [3] " SLU7    RPL36A  SYF2    RPS24"                              
 [4] " CDC25B DNMT1  EP300  PTPN1  BCL11B ITGB7 "                  
 [5] " CLSTN1   CX3CR1   DOCK10   HNRNPR   MAPK8IP3"               
 [6] " ATP5PF    COX7B     ATP5F1EP2 NDUFB3    NDUFS4    UQCRB    "
 [7] " UQCRH "                                                     
 [8] " COX7B     ATP5F1EP2 CETN3     NDUFB3    ATP5PF   "          
 [9] " ENY2      NDUFS4    MRPL22    UQCRB     MRPS18C  "          
[10] " UQCRH  "            
a1 <- as.data.frame(a1)
image-20191205213421827

上面得到的图片中的基因可以在继续unique,得到最后的,和原文的比较,目前看好像没有完全一样的,下回分解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容