R的bioconductor包里面的txdb对象及GRange对象详解

创建txdb对象的三种方法:
一是读取实例文件
library(GenomicFeatures)
samplefile <- system.file("extdata", "hg19_knownGene_sample.sqlite",
package="GenomicFeatures")
txdb <- loadDb(samplefile)
这个文件是hg19的一个子集,里面只有178个转录本,620个外显子
二是直接读取包里面的hg19全对象
source("http://bioconductor.org/biocLite.R")
biocLite("TxDb.Hsapiens.UCSC.hg19.knownGene")
library("TxDb.Hsapiens.UCSC.hg19.knownGene")
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
这是hg19所有已知基因的全部信息,共有23056个基因信息,289969个外显子
三是自己创建,这将是非常麻烦的事情,我就不多说了!

然后我们讲讲对这个对象可以做些什么操作吧:
首先讲讲这个txdb对象有几个常用的方法,其中genes,transcripts,exons,cds肯定是最简单啦,
就是txdb对象处理之后都会返回Granges对象
比如下面的代码
exon_txdb=exons(txdb)
genes_txdb=genes(txdb)
tmp=as.data.frame(exon_txdb)
write.table(tmp,"exon.pos",row.names=F)
tmp=as.data.frame(genes_txdb)
write.table(tmp,"gene.pos",row.names=F)
这样就输出了我们所有的23056个基因的染色体位置,起始终止坐标信息,还有289969个外显子信息。
外显子文件如下
"seqnames" "start" "end" "width" "strand" "exon_id"
"chr1" 11874 12227 354 "+" 1
"chr1" 12595 12721 127 "+" 2
"chr1" 12613 12721 109 "+" 3
"chr1" 12646 12697 52 "+" 4
"chr1" 13221 14409 1189 "+" 5
gene文件如下
"seqnames" "start" "end" "width" "strand" "gene_id"
"chr19" 58858172 58874214 16043 "-" "1"
"chr8" 18248755 18258723 9969 "+" "10"
"chr20" 43248163 43280376 32214 "-" "100"
"chr18" 25530930 25757445 226516 "-" "1000"
还有几个类似的方法:transcriptsBy(txdb,by="gene")对象按照gene来对转录本分组,
可以看到,分成了23459个元素的list,其中第一个基因有两个转录本,也有一些基因只有一个转录本,甚至有些基因会有非常多的转录本,
也可以用exonsBy,cdsBy来对它进行处理,都会返回Granges对象

还有,因为这个txdb对象是数据库对象,所以对数据库的操作可以对它一样,详解见biomaRt里面的

columns可以查看这个数据库对象的values,用keytypes可以查看它的一些检索主键,这样就可以用select来通过主键对属性values进行检索。

用select进行检索的代码如下

keys <- c("100033416", "100033417", "100033420")

select(txdb, keys = keys, columns="TXNAME", keytype="GENEID")

cols <- c("TXNAME", "TXSTRAND", "TXCHROM")

select(txdb, keys=keys, columns=cols, keytype="GENEID")

 

上面我们演示了如何把Granges对象写到txt文档里面,但是这个对象的重要性远远不止如此
我们接下来再讲讲这个Granges对象吧,首先还是如何创建它!
第一种方法就是上面的txdb对象通过函数处理返回Granges对象!
第二种是自己手动创建

同样的对这个对象也会有很多很多的方法
seqnames(exon_txdb)返回一个class 'Rle' [package "S4Vectors"] with 4 slots,有93个染色体信息,以及每条染色体上面有多少个外显子信息
ranges(exon_txdb)返回外显子的起始终止位点,长度,以及其它信息,也是一个对象class 'IRanges' [package "IRanges"] with 6 slots
还有很多函数
strand(exon_txdb)返回外显子的正负链信息,要么在正链要么在负链
mcols(exon_txdb)返回exon的id编号,1到27750个
seqlengths(exon_txdb)返回每条染色体的长度信息
names,length
GRanges对象还有很多其它类型的操作,非常好玩的,split,shift,resize,flank,reduce,gaps,disjoin,coverage
其它求交集并集和都可以用,union,intersect,setdiff,pintersect,psetdiff
还有非常多的高级功能,我也还没开始用

Comments are closed.