基因长度计算——非冗余外显子长度之和

定义基因的长度(生信菜鸟团)

一个基因可以转录为多个转录本,真核生物里面每个转录本通常是由一个或者多个exon组成,能翻译为蛋白的exon区域是CDS区域,不能翻译的那些exon的开头和结尾是UTR区域,翻译区域合起来是ORF序列,转录本逆转录就是cDNA序列。基因长度并不是简单的 end - start

目前主流定义基因长度的几种方式:

  • 挑选基因的最长转录本
  • 选取多个转录本长度的平均值
  • 非冗余外显子长度之和
  • 非冗余 CDS(Coding DNA Sequence) 长度之和
  • 非冗余外显子

基因长度计算——非冗余外显子长度之和

注意到这里的"非冗余",就是存在一个基因的多个外显子之间存在重叠(比如基因A的1号外显子较短,2号外显子长,1号包含在2号中),单纯的相加会重复计算。

R:
安装R包"GenomicFeatures"
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("GenomicFeatures")
加载R包
library("GenomicFeatures")
setwd(" ")

导入gff3文件
txdb <- makeTxDbFromGFF("1.gff3",format="gff3")
获取外显子位置
exons_gene <- exonsBy(txdb, by = "gene")
去除外显子重叠部分,计算外显子长度
exons_gene_len <- lapply(exons_gene,function(x){sum(width(reduce(x)))})

write.table(exons_gene_len,file ="gene_exons_len.txt",sep ="\t",quote =F,col.names =T,row.names =F)

linux:
行列转换
cat gene_exons_len.txt | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]"\t"$i; } } }  \
END{ for(i=1;i<=NF;i++){ print arr[i]; } }'  > geneexons_len.txt
rm exons_gene_len.txt
其他计算基因长度的方法可见:https://www.jianshu.com/p/abea4033b61e 小洁忘了怎么分身

参考:
http://www.bio-info-trainee.com/3991.html 生信菜鸟团
https://cloud.tencent.com/developer/article/1606491
https://www.jianshu.com/p/abea4033b61e 小洁忘了怎么分身

你可能感兴趣的:(基因长度计算——非冗余外显子长度之和)