美文网首页DNase-seq
生信课程笔记7-基因区间和注释资源

生信课程笔记7-基因区间和注释资源

作者: 果蝇饲养员的生信笔记 | 来源:发表于2020-03-24 17:37 被阅读0次

    Summary

    1.Bioconductor注释资源

    BSgenome.Hsapiens.UCSC.hg38 人类的全基因组序列
    TxDb.Hsapiens.UCSC.hg38.knownGene 人类基因组注释,位置信息(GenomicFeatures)
    GenomicFeatures:序列特征,如gene model,genes、exons、UTRs、transcripts
    gene model:基因模型,被定义为基因产物的描述,覆盖认为是基因的核酸区域

    2.基因区间RangeData

    2.1 IRanges 存储区间信息
    两套坐标基准:0-based [start,end),1-based [start,end],这里是1-based
    IRanges() 指定start、end、width三者之二
    length(x) 长度,行数 names(x) 名称
    start(x) end(x) width(x)
    restrict(x,20,40) 截取部分区间
    flank(x,width=7) 上游/左侧,start=F下游
    x+4L 上、下游同时增加4bp
    shift(x,shift=10) 向下游/右平移10bp
    range(x) 总区间,从最小start到最大end
    reduce(x) 将重叠区域缩减为1个,得到总覆盖的几个大区域
    gaps(x) 几个大区域之间的间区gap
    intersect(x,y) 交集,xy共有的
    union(x,y) 并集,x或y有的
    setdiff(x,y) 补集,x中有y中没有的部分

    自己画的

    2.2 GRanges 基因区间的扩展
    坐标三要素:染色体/序列名称,区间IRanges,正负链。
    GRanges() 指定seq、ranges(=IRanges)、strand | seqlengths、metadata
    names(gr2) length(gr2)
    seqlengths(gr2) seqnames(gr2) strand(gr2)
    ranges(gr2) gr2@ranges start(gr2) end(gr2) width(gr2)
    mcols(gr2) metadata columns数据框

    2.3 GRangesList
    本质是列表,取子集用[],取子集中的元素用[[]]
    GRangesList(gr1, gr2)
    gr_split <- split(gr2,seqnames(gr2)) 按seqnames拆分GRanges成GRangesList
    length(gr_split) names(gr_split)
    gr_split[[1]]
    unsplit(gr_split,seqnames(gr2))
    unlist(gr_split)

    3.基因序列BSgenome

    3.1 BSgenome
    BSgenome.Hsapiens.UCSC.hg38 物种、提供者、版本、发布日期、发布标准名称、染色体名称
    length(hg38)
    seqinfo(hg38) Hsapiens@seqinfo
    seqnames(hg38) hg38@seqinfo@seqnames
    seqlengths(hg38) hg38@seqinfo@seqlengths

    3.2 DNAString 获取序列
    chr22 <- getSeq(hg38,"chr22") hg38$chr22 chr22<-Hsapiens[["chr22"]] 得到一个DNAString实例
    length(chr22) 核苷酸数
    str1 = getSeq(hg38,"chr22",start=1,end=30) str1<-hg38[["chr22"]][1:30]
    chr22[1:30] chr22[IRanges(start=1,width=30)]
    str2 = DNAString("TACCCTAACCCTAACTAACCCTAA")
    reverse(str2) 反向序列,直接反过来
    reverseComplement(str2) 反向互补
    translate(str2) 翻译成氨基酸,得到AAString实例
    alphabetFrequency(str2) 每个碱基出现次数

    3.3 DNAStringSet
    irs <- IRanges(start=35310335,end=35395968)
    grs <- GRanges(seqnames = "chr6",ranges = irs, strand = "*")
    grs == GRanges("chr6:35310335-35395968")
    seq <- getSeq(Hsapiens,grs) 得到DNAStringSet类,有1个元素
    seq[[1]][100:200]
    DNAStringSet(c("AAACTG", "CCCTTCAAC", "TACGAA")) 直接创建一个DNAStringSet实例

    4.TxDb基因组注释数据库(GenomicFeatures)

    4.3 genes/transcripts/exons 提取基因/转录本/外显子
    transcripts(txdb) 提取所有转录本的坐标,得到GRanges对象
    4.4 transcriptsBy/cdsBy/exonsBy 提取基因组特征
    transcriptsBy(txdb,by="gene",use.name=T) 按照基因提取转录本,得到GRangesList,每一个元素是一个基因模型GRanges
    4.5 extractTranscriptSeqs 获取序列
    extractTranscriptSeqs(Hsapiens,cds2) 得到DNAStringSet


    R Script

    ### 1.Bioconductor注释资源
    library(BSgenome.Hsapiens.UCSC.hg38)  #人类的全基因组序列
    library(TxDb.Hsapiens.UCSC.hg38.knownGene)  #人类基因组注释,位置信息(GenomicFeatures)
    # GenomicFeatures:序列特征,如gene model,genes、exons、UTRs、transcripts
    # gene model:基因模型,被定义为基因产物的描述,覆盖认为是基因的核酸区域
    
    ### 2.基因区间RangeData
    ## 2.1 IRanges 存储区间信息 [start,end]
    #两套坐标基准:0-based [start,end),1-based [start,end]
    #IRanges() 指定start、end、width三者之二
    IRanges(start=4,end=13)
    IRanges(start=4,width=3)
    x <- IRanges(start=c(10, 20, 50), end=c(30, 40, 60))
    x #创建了一个IRanges对象
    str(x) #IRanges类,6个slots
    length(x) #长度,行数
    names(x) <- paste0("gene",1:3) #指定每个区间的名称
    names(x)
    start(x)  #end(x)  width(x)
    restrict(x,20,40) #截取部分区间(restrict限制,约束)
    flank(x,width=7) #上游/左侧,start=F下游(Flank侧面)
    x+4L #上、下游同时增加4bp
    shift(x,shift=10)  #向右平移10bp
    range(x) #总区间,从最小start到最大end
    reduce(x) #将重叠区域缩减为1个,得到总覆盖的几个大区域
    gaps(x) #几个大区域之间的间区gap
    x1 <- x
    end(x1) <- end(x1) + 4
    x1[start(x1) < 50]
    y <- x1[1:2]
    c(x,y) #简单合并
    intersect(x,y) #交集,xy共有的
    union(x,y) #并集,x或y有的
    setdiff(x,y) #补集,x中有y中没有的部分
    
    ## 2.2 GRanges 基因区间的扩展
    #坐标三要素:染色体/序列名称,区间,正负链。
    #GRanges为IRanges+染色体+正负链信息
    #至少需要三要素:seqname(seq)、ranges(=IRanges)、strand(+/-/*)
    #GRanges() 指定seq、ranges(=IRanges)、strand | seqlengths、metadata
    gr1 <- GRanges(seq = c("chr1","chr2","chr1"),
                   ranges = IRanges(start=c(10, 20, 50), end=c(30, 40, 60)),
                   strand = "+")
    gr1 #创建了一个GRanges对象
    gr2 <- GRanges(seq = c("chr1","chr3"),
                   ranges = y,
                   strand = "-",
                   gc = seq(10,70,length.out = 2),
                   seqlengths = c(chr1=150,chr2=200,chr3=250))
    gr2 #增加的信息"gc"将作为metadata column,seqlengths为seqinfo
    str(gr2) #GRanges类,7个slots
    #seqnames(又含有4个slots),ranges(又含有6个slots),strand,seqinfo,metadata...
    names(gr2) #每行的名称
    length(gr2) #行数
    seqlengths(gr2) #序列长度
    seqnames(gr2) #序列名称,Rle类
    strand(gr2)
    ranges(gr2) #IRanges对象 #gr2@ranges #start(gr2) end(gr2) width(gr2)
    mcols(gr2) #metadata columns数据框
    gr2$gc #gc向量
    gr2[seqnames(gr2)=="chr1"] #序列名称为chr1的行
    sort(c(gr1,gr2)) #按基因组顺序排序(先染色体;再位置;正链+,负链-,不分链*)
    gr2[order(gr2$gc)]  #按某一列从小到大进行排序,decreasing=T从大到小
    
    gr1
    gr2
    #下面的操作得到的都是GRanges对象
    restrict(gr2,20,40) #截取部分区间
    flank(gr2,width=10) #上游,-链是右侧,start=F下游
    gr2+4L #上、下游同时增加4bp
    shift(gr2,shift=10)  #正负链都向染色体下游平移(正向平移)
    range(gr1) #总区间,从最小start到最大end,相同seqnames才能合并
    reduce(gr2) #将重叠区域缩减为1个,得到总覆盖的几个大区域
    gaps(gr2) #基因间区gap,+/-/*链上所有没有基因覆盖的区间
    intersect(gr1,gr2) #交集,共有的,正负链是不同的区间
    union(gr1,gr2) #并集
    setdiff(gr1,gr2) #补集,gr1中有gr2中没有的部分
    
    ## 2.3 GRangesList
    #本质是列表,取子集用[],取子集中的元素用[[]]
    GRangesList(gr1, gr2) #创建一个包含2个元素的GRangesList
    gr_split <- split(gr2,seqnames(gr2))  #按seqnames拆分GRanges成GRangesList
    gr_split #包含3个元素的GRangesList(CompressedGRangesList类)
    length(gr_split) #元素数目
    names(gr_split) #子集名称,即seqnames
    gr_split[[1]] #取第一个子集
    unsplit(gr_split,seqnames(gr2)) #拆分后补回来还和gr2一样,GRanges对象
    unlist(gr_split) #拆分后合并在一起,GRanges对象,行名不同了
    c(gr_split,gr_split) #简单合并
    unique(gr_split)  #和gr_split相同
    
    gr3 <- c(gr1,gr2); gr3 #GRanges
    gr4 <- split(gr3,seqnames(gr3)); gr4 #GRangesList
    #下面的操作得到的都是GRangesList对象
    restrict(gr4,20,40) #对GRangesList每一个元素(GRanges)的每一行截取部分区间
    flank(gr4,width=10) #对每一个元素的每一行取上游10bp,start=F下游,不能小于0
    gr4+4L #上、下游同时增加4bp
    shift(gr4,shift=-10)  #正负链都向染色体上游平移(反向平移)
    range(gr4) #总区间,每一个元素从最小start到最大end,正负链是不同的区间
    reduce(gr4) #将重叠区域缩减为1个,得到总覆盖的几个大区域
    #不能使用gaps()
    gr5 <- c(gr4[1],gr4[1:2]); gr5
    names(gr5) <- c("chr3","chr2","chr1") #并没有什么用
    #gr4,gr5必须是相同长度的,下面的比较不会看元素名称,而是按元素顺序进行比较
    intersect(gr4,gr5) #交集,共有的
    union(gr4,gr5) #并集
    setdiff(gr4,gr5) #补集,gr4中有gr5中没有的部分
    
    ## 2.4 Rle
    # Rle类存储以运行长度编码格式(run-length encoding format)存储的原子向量
    # Rle对象用值value+长度length两个属性来表示原向量,value和length为原子向量
    chr.str <- c(rep("Chr1",10),rep("Chr2",20),rep("Chr1",5))
    chr.str
    chr.rle <- Rle(chr.str)
    chr.rle  #表示为Chr1重复10次,Chr2重复20次,Chr1重复5次。
    identical(as.vector(chr.rle),chr.str)  #Rle对象向量化后和原向量是完全相同的
    
    ### 3.基因序列BSgenome
    ## 3.1 BSgenome
    hg38 <- BSgenome.Hsapiens.UCSC.hg38
    hg38  #物种、提供者、版本、发布日期、发布标准名称、染色体名称
    #hg38等同于Hsapiens
    length(hg38) #染色体/序列数目
    seqinfo(hg38) #序列信息  #Hsapiens@seqinfo
    #seqinfo有4个槽(名称seqnames/长度seqlengths/环形is_circular/genome)
    seqnames(hg38) #染色体/序列名称  #hg38@seqinfo@seqnames
    seqlengths(hg38)  #各染色体的长度  #hg38@seqinfo@seqlengths
    
    ## 3.2 DNAString 获取序列
    chr22 <- getSeq(hg38,"chr22")  #hg38$chr22  #chr22<-Hsapiens[["chr22"]]
    chr22 #得到一个DNAString实例
    length(chr22) #核苷酸数
    
    str1 = getSeq(hg38,"chr22",start=1,end=30)  #str1<-hg38[["chr22"]][1:30]  
    str1 #等同于chr22[1:30]  #chr22[IRanges(start=1,width=30)]
    #得到DNAStringSet的getSeq(hg38,GRanges(seq="chr22",ranges=IRanges(start=1,end=30), strand="*"))
    str2 = DNAString("TACCCTAACCCTAACTAACCCTAA")
    str2
    reverse(str2) #反向序列,直接反过来  
    reverseComplement(str2) #反向互补  
    translate(str2) #翻译成氨基酸,得到AAString实例
    alphabetFrequency(str2) #每个碱基出现次数
    
    ## 3.3 DNAStringSet
    irs <- IRanges(start=35310335,end=35395968)
    grs <- GRanges(seqnames = "chr6",ranges = irs, strand = "*")
    grs == GRanges("chr6:35310335-35395968")
    seq <- getSeq(Hsapiens,grs)
    seq  #DNAStringSet类,有1个元素
    seq[[1]][100:200]
    
    dna <- DNAStringSet(c("AAACTG", "CCCTTCAAC", "TACGAA"))
    dna  #直接创建一个DNAStringSet实例
    
    ### 4.TxDb基因组注释数据库(GenomicFeatures)
    ## 4.1 TxDb
    txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene
    txdb
    ## 4.2 设置活动的染色体
    ias <- isActiveSeq(txdb)
    t <- c(rep(FALSE,21),TRUE,rep(FALSE,length(ias)-22))
    names(t) <- names(ias)
    isActiveSeq(txdb) <- t #只保留22号染色体
    
    ## 4.3 genes/transcripts/exons 提取基因/转录本/外显子
    tx1 <- transcripts(txdb)
    tx1  #提取所有转录本的坐标,得到GRanges对象
    
    ## 4.4 transcriptsBy/cdsBy/exonsBy 提取基因组特征
    #cdsBy(x, by=c("tx"), use.names=T)
    #transcriptsBy/exonsBy/cdsBy/intronsByTranscript/fiveUTRsByTranscript/threeUTRsByTranscript
    #x为TxDb对象;by为"gene", "tx","exon", "cds"之一 
    #得到GRangesList
    txs <- transcriptsBy(txdb,by="gene") #按照基因提取转录本
    txs #得到GRangesList,每一个元素是一个基因模型GRanges
    exs <- exonsBy(txdb,by="tx",use.name=T) #按照转录本提取外显子
    exs #每一个元素是一个转录本,包含多个外显子
    cds1 <- cdsBy(txdb,by="tx",use.names=T) #按照转录本提取CDS
    cds1
    cds2 <- cds1[strand(cds1)=="+"][1:10] #取GRangesList正链上的10个元素
    
    #These functions return all the features of a given type 
    #grouped by another feature type in a GRangesList object. 
    #use.names=F default,the group names are the internal ids of the features used for grouping
    #返回列表的元素名,为用于分组的特征的独有ID,确保是唯一的
    #use.names=T,the names of the grouping features are used instead of their internal ids
    #返回列表的元素名,为用于分组的特征的名称,不一定是唯一的,甚至可能是NA
    #by="gene"不能用use.names=T,因为基因ID是外部ID,txdb中没有"gene_name"栏
    
    ## 4.5 extractTranscriptSeqs 获取序列
    #extractTranscriptSeqs(x, transcripts/cds, ...)
    #x为BSgenome对象(或DNAString对象)
    #transcripts/cds为GRangesList对象
    cds.seqs <- extractTranscriptSeqs(Hsapiens,cds2)
    cds.seqs #DNAStringSet
    
    ## 4.6 导出为fasta格式
    writeXStringSet(cds.seqs,filepath="cds.fasta",format="fasta")
    

    相关文章

      网友评论

        本文标题:生信课程笔记7-基因区间和注释资源

        本文链接:https://www.haomeiwen.com/subject/tecayhtx.html