生信必备生物知识R语言做生信生物信息分析

R- GenomicRanges使用

2018-06-23  本文已影响179人  刘小泽

刘小泽写于18.6.22

本文包含了Rstudio安装、bioconductor使用以及常用R包GenomicRanges的介绍

R & RStudio安装:

官网下载 https://www.rstudio.com/products/rstudio/download/#downloadIf you don't already have R, download it here

Bioconductor使用:

官网链接https://www.bioconductor.org/

官网主页:

Bioconductor官网

主要关注Courses、Common work flows这两项内容

什么是GenomicRanges?

官网给出的解释

This package defines general purpose containers for storing and manipulating genomic intervals and variables defined along a genome.

This package lays a foundation for genomic analysis by introducing three classes (GRanges, GPos, and GRangesList), which are used to represent genomic ranges, genomic positions, and groups of genomic ranges.

这个R包可以用来对基因组位置进行操作【基因组位置(genomic range/intervals)由染色体号、起始和结束位点、链方向组成,每个基因组版本都有特定的位置信息】。它可以定义序列名称,包括起始点及终止点的长度信息,正负链,或者他们的score值和GC值等。随着NGS的大规模应用,原来主打microarray的bioconductor也开始向NGS转移。GR包和IRanges、Biostrings一起构成了NGS数据的基础。

> gr <- GRanges(seq = Rle(c("chr1", "chr2","chr3","chr1"), c(2,3,3,2)),
+               ranges = IRanges(101:110, end = 111:120, names = head(letters,10)),
                # 这里创建ranges也可以指定起始位点start和宽度width,就不需要end了
+               strand = Rle(strand(c("-", "+", "*","-","+")), c(2,3,1,2,2)),
+               score = 1:10,
+               GC = seq(0,1,length=10))

创建了10条序列的信息:

gr_1.png 以|为界分为左右两块区域:
左边区域:【必选】基因组坐标信息(seqnames, ranges, strand);用granges(gr) 查看
右边区域:【可选】注释信息(score, GC 等); 用mcols(gr)查看,用 mcols(gr)$score 查看具体项
width() 统计基因组序列长度分布;length() 计算行数;
names() 查看最前列的名称

1.1 gr拆分与重组
拆分:sp <- split(gr, rep(1:2,each=5)) 意思是分成两组,一组五个重复

gr_2.png 重组:c(sp[[1]],sp[[2]]), 当然c()也可以连接两个GRange object
重组后去重:unique()

1.2 取子集
1.2.1 gr[2:3] 得到2、3列; gr[2:3, "GC"] 多含了GC这一项
1.2.2 按names划分单行singles <- split(gr, names(gr),对单行操作:
$复制 rep(singles[[2]], times = 3)
$倒置 rev(gr)
$选择特定区域head(gr, n=2) 得到前两行,tail 从后向前数
$选择特定行 window(gr, start=2,end=4),选择了2-4行
$选择跨区域特定行gr[IRanges(start = c(2,7), end = c(3,9))] ,选择2-3行 & 7-9行

1.3 序列间隔操作对于一个gr.obj而言
1.3.1 基本操作:start、end、width(=end-start)、range(将一条链上相连的区域组合在一起进行统计)
1.3.2 flank:翻译为侧翼,可用来找上下游特定区域(详见3 .3)
1.3.3 shift: range整体平移(详见3.4) ; resize: 改变range宽度【+链修改end位置;-链修改start位置】
1.3.4 reduce:比对ranges,然后merge overlap (详见3.4下方图)
1.3.5 gaps: 寻找range之间的gap
1.3.6 disjoin(): 将range变为non-overlapping (详见3.6)
1.3.7 coverage:统计所有ranges中overlap的数量

1.4 比较多个gr.obj
1.4.1 union(gr1, gr2) 寻找并集;insersect()寻找交集;setdiff()寻找补集

union & intersect & setdiff 1.4.2 当两个gr.obj的行数相同时,即他们是parallel的关系,使用punion() / pintersect() / psetdiff()
  1. GRangesList

    • 一些比较重要的基因组特征信息,比如转录本它构成了外显子,但是这些区域是分散的。单看一个是不够的,聚合在一起表达时才能揭示一些信息。如何将这些分散的特征信息聚集在一起?

    • GRangeList就能完成这个工作:

      2.1 比如现在有两个转录本,我们需要先把它们组合在一起

gr1 <- GRanges(
  seqnames = "chr2",
  ranges = IRanges(103,106),
  strand = "+",
  score = 5L, GC = 0.45)

gr2 <- GRanges(
  seqnames = c("chr1", "chr1"),
  ranges = IRanges(c(107,113), width = 3),
  strand = c("+", "-"),
  score = 3:4, GC = c(0.3,0.5)
)

grl = GRangesList("txA" = gr1, "txB" = gr2)
就得到这样的list: grl_1.png

2.2 查看基本信息
seqnames(grl)、ranges(grl)、strand(grl) length()、names()输出list的信息; seqlength()输出list子集的长度信息
elementNROWS(grl) 输出各子集的行数,相对于data_frame中的lapply要更快isEmpty(grl) 检查list中是否包含空object
mcols(unlist(grl)) 查看list下各object的metadata(如score/ GC等)的信息

2.3 合并list
先合并grl3 <- c(grl1, grl2), 再按gr3中各object的名称重组regroup(grl3, names(grl3))

2.4 取子集
[]返回的是list其中一个object; [[]]返回的是object中的某行
对子集进行操作:
head(grl, n=1)、tail(同head)、rev(grl)、rep(grl[[1]], times =3)、
window(grl, start =1, end=1)start和end代表list中object的顺序,这里只取出了第一个object

2.5 list集合中的多重操作
2.5.1 sapply(grl, length) 对list中各个obj求长度【lapply也可以,只是输出格式为列表】【sapply的 ‘s’ 意思是simple; lapply的 ‘ l’ 意思是list】
2.5.2 mapply(c, grl, grl2) 对多个list中的obj分别进行合并

grl_2.png

2.5.3 去list中冗余Reduce(c, grl) ,会把所有的obj们合并在一起
2.5.4 想对list中某一个object进行操作 流程是:unlist -> command -> list

# 例如,想在object中增加一列meta信息log_socre,求socre的对数
gr <- unlist(grl)
gr$log_score <- log(gr$score)
grl <- relist(gr, grl)
grl_3.png 3. 比较实用的部分

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到Bioplanet520@outlook.com

bioinfoplanet
上一篇下一篇

猜你喜欢

热点阅读