52.《Bioinformatics Data Skills》之实战:获取基因组基因间区域与内含子区域

今天我们通过2个实战来掌握函数gapssetdiffreduce在GenomicRanges中的使用:

  1. 获取基因间区域;
  2. 获取基因的内含子区域。

Gaps函数了解

首先了解一下提取基因间区域需要用到的gaps函数,此函数用于返回范围间的空白区域,之前在IRanges包中介绍过。但GRanges对象增加了strand信息,结果有所不同,通过一个简单的例子说明:

首先创建一个GRanges对象gr2

> library(GenomicRanges)
> gr2 <- GRanges(c("chr1", "chr2"), IRanges(start = c(5, 10), width = 6), strand = c("+", "-"), seqlengths = c(chr1 = 20, chr2 = 40))
> gr2
GRanges object with 2 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr1      5-10      +
  [2]     chr2     10-15      -
  -------
  seqinfo: 2 sequences from an unspecified genome

gr2使用gaps函数:

> gaps(gr2)
GRanges object with 8 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr1       1-4      +
  [2]     chr1     11-20      +
  [3]     chr1      1-20      -
  [4]     chr1      1-20      *
  [5]     chr2      1-40      +
  [6]     chr2       1-9      -
  [7]     chr2     16-40      -
  [8]     chr2      1-40      *
  -------
  seqinfo: 2 sequences from an unspecified genome

观察以上结果,发现gaps并没有如我们想象那样返回一条区域的空白,而是根据链信息保留所有的可能性(8条)。这是严谨正确的做法,然而有时我们不考虑链信息,可以将GRanges对象的链设置为“*”,通过如下方式获取gaps区域:

> gr3 <- gr2
> gaps(gr3)[strand(gaps(gr3)) == "*"]
GRanges object with 4 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr1       1-4      *
  [2]     chr1     11-20      *
  [3]     chr2       1-9      *
  [4]     chr2     16-40      *
  -------
  seqinfo: 2 sequences from an unspecified genome

提取基因间区域

以小鼠的所有基因转录本数据为例:

> library(TxDb.Mmusculus.UCSC.mm10.ensGene)
> txdb <- TxDb.Mmusculus.UCSC.mm10.ensGene

通过seqinfo函数获取所有染色体区域:

> chr_rngs <- GRanges(seqinfo(txdb))
> head(chr_rngs, 2)
GRanges object with 2 ranges and 0 metadata columns:
       seqnames      ranges strand
          <Rle>   <IRanges>  <Rle>
  chr1     chr1 1-195471971      *
  chr2     chr2 1-182113224      *
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

使用reduce函数融合所有重叠的转录本区域:

> collapsed_tx <- reduce(transcripts(txdb))

避免考虑链信息:

> strand(collapsed_tx) <- "*"

最终采用setdiff命令得到基因间区域:

> intergenic <- setdiff(chr_rngs, collapsed_tx)

注:这里转录本间的范围都当作基因间区域,相对只考虑蛋白编码基因来说范围更少。

提取内含子区域

这里介绍两种方式获取基因的内含子区域:

  1. 直接使用封装好的函数,非常简单,如下:

    > mm_introns <- intronsByTranscript(txdb)
    
  2. 为了练习,采用手动方式提取,内含子区域通过转录本区域减去外显子区域获得。这部分的内容稍有难度,掌握之后可以加深我们对基因组操作的理解。简单起见,这里只提取淀粉酶基因(amylase 1,Ensembl id:ENSMUSG00000074264)的内含子区域,具体过程如下:

首先根据基因id获取amy1基因的转录本:

> amy1 <- transcriptsBy(txdb, "gene")$ENSMUSG00000074264
> amy1
GRanges object with 5 ranges and 2 metadata columns:
      seqnames              ranges strand |     tx_id            tx_name
         <Rle>           <IRanges>  <Rle> | <integer>        <character>
  [1]     chr3 113555710-113577830      - |     18879 ENSMUST00000067980
  [2]     chr3 113555953-113574762      - |     18880 ENSMUST00000106540
  [3]     chr3 113556149-113562018      - |     18881 ENSMUST00000172885
  [4]     chr3 113562690-113574272      - |     18882 ENSMUST00000142505
  [5]     chr3 113564987-113606699      - |     18883 ENSMUST00000174147
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

提取小鼠所有转录本的外显子区域:

mm_exons <- exonsBy(txdb, 'tx')
> head(mm_exons,2)
GRangesList object of length 2:
$`1`
GRanges object with 1 range and 3 metadata columns:
      seqnames          ranges strand |   exon_id   exon_name exon_rank
         <Rle>       <IRanges>  <Rle> | <integer> <character> <integer>
  [1]     chr1 3054233-3054733      + |         1        <NA>         1
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

$`2`
GRanges object with 1 range and 3 metadata columns:
      seqnames          ranges strand |   exon_id   exon_name exon_rank
         <Rle>       <IRanges>  <Rle> | <integer> <character> <integer>
  [1]     chr1 3102016-3102125      + |         2        <NA>         1
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

由于外显子区域是以tx_id(转录本ID)为名字的GRangesList,这里我们将amy1的转录本也转换为以tx_id命名的GRangesList对象:

> amy1_tx <- split(amy1, amy1$tx_id)
> head(amy1_tx, 2)
GRangesList object of length 2:
$`18879`
GRanges object with 1 range and 2 metadata columns:
      seqnames              ranges strand |     tx_id            tx_name
         <Rle>           <IRanges>  <Rle> | <integer>        <character>
  [1]     chr3 113555710-113577830      - |     18879 ENSMUST00000067980
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

$`18880`
GRanges object with 1 range and 2 metadata columns:
      seqnames              ranges strand |     tx_id            tx_name
         <Rle>           <IRanges>  <Rle> | <integer>        <character>
  [1]     chr3 113555953-113574762      - |     18880 ENSMUST00000106540
  -------
  seqinfo: 66 sequences (1 circular) from mm10 genome

接下来,我们通过匹配Amy1基因的tx_id来获取Amy1的外显子区域:

> amy1_exons <- mm_exons[match(names(amy1_tx), names(mm_exons))]

在确定转录本ID与外显子区域完全匹配的情况下,使用psetdiff命令获取该基因内含子区域(注:psetdiff用于配对数据,效果类似setdiff)

> all(names(amy1_tx) == names(amy1_exons))
[1] TRUE
> amy1_intron <- psetdiff(unlist(amy1_tx), amy1_exons)

通过与方法一获取的内含子区域对比,检验结果是否正确:

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

推荐阅读更多精彩内容