利用R处理基因组数据

基本操作

比方说我们读入人类基因组文件


左半部分

右半部分
genes=read.table("hg19_gene_table.txt", comment="", header=TRUE)
#统计基因数量
nrow(genes)
#统计基因长度
geneLen=genes$txEnd - genes$txStart
#寻找最长的基因
idx=which.max(geneLen)
genes[idx, ]
#寻找最长的外显子
idx=which.max(nExon)

利用BSgenome

对于刚安装R的同学,安装BSgenome可能会报错,那是没有安装Rtools的原因,对于win用户,安装Rtools可以直接在官网上下载,然后手动安装,然后配制环境变量到Rtools安装的那个路径

利用Rstudio可以直接进行安装,安装Rtools是通过installr来实现的

install.packages("installr")
install.packages("stringr")    ###依赖包
library(stringr)
library(installr)

install.Rtools()

然后选择下合适的Rtools版本即可
我们进入正题

library(BSgenome)
available.genomes()
library(BSgenome.Hsapiens.UCSC.hg19)

#提取一号染色体
Seq= Hsapiens [["chr1"]]
#统计ATCG的数量
bases=alphabetFrequency(Seq,baseOnly=TRUE)
bases[1:4]
#统计碱基占比和GC含量
ntotBases=sum(bases[1:4])
baseFreq=bases[1:4]/ntotBases
GCcontent=baseFreq["C"]+baseFreq["G"]

#把含有cg的位置匹配下来
cg=matchPattern("CG", Seq)
ncg=length(cg)
#以1号染色体为例
##计算每1000bp窗口GC含量密度
ss=seq(1, length(Seq), by=1000) #划分窗口
ss=ss[-length(ss)] ## remove the last one
Seq.set=DNAStringSet(Seq, start=ss, end=ss+999) #每1000bp的序列,构造对象
ff=alphabetFrequency(Seq.set, baseOnly=TRUE) #统计每1000bp每个碱基的频率
pCG=(ff[,"C"]+ff[,"G"])/rowSums(ff)
hist(pCG[pCG>0],100)
ff
hist
library(GenomicFeatures)
txdb=makeTxDbFromUCSC(genom="hg19",tablename="refGene") ## 提供个接口,连接hg.19
genes.hg19 = genes(txdb)

## get transcriptional start site.
## Note that txEnd is the start site for genes on "-" strand
tss=start(genes.hg19)
idx=which(strand(genes.hg19)=="-")
tss[idx]=end(genes.hg19)[idx]

加载时需要事先先安装RMariaDB这个接口

#创造GRanges对象,提取TSS
allchrs = as.character(seqnames(genes.hg19))
idx=c(grep("random", allchrs),grep("hap", allchrs))
## create ranges with TSS +/- 500 bp
TSS=GRanges(seqnames=Rle(allchrs[-idx]), ranges=IRanges(tss[-idx]-500,tss[-idx]+500))

那么要看看CG出现的区段,是否与TSS有交互,那么由cg和TSS这两个对象中,提取相应位置,写成一张表,做个判断就可以了,结合甲基化测序数据,那么就知道哪些TSS有被甲基化

你可能感兴趣的:(利用R处理基因组数据)