当前位置:网站首页>(五)R语言入门生物信息学——ORF和序列分析
(五)R语言入门生物信息学——ORF和序列分析
2022-07-06 09:17:00 【EricFrenzy】
注:本博客旨在分享个人学习心得,有不规范之处请多多包涵!
概念介绍
在人体内,为了表达DNA上的基因,这个基因包含的DNA在被转录为pre-mRNA后经过进一步处理成为成熟的mRNA,mRNA紧接着会被核糖体用来合成蛋白质,从而控制生物体的反应。在mRNA上,每三个碱基组成一个密码子,对应一种氨基酸。下图为密码子与氨基酸的对照表:
要合成一个正常的蛋白质,mRNA序列上的两端需要分别有一个起始密码子(图上标为start)和一个终止密码子(图上标为stop)。但在DNA上有许多这样子的起始和终止密码子,产生很多种不同的序列组合。为了在DNA上找到所有可能的能用来制作某种蛋白质的序列组合,我们用开放阅读框(ORF,Open Reading Frame)来找到所有具有编码蛋白质潜能的序列。
找ORF的代码实现
在R语言中找ORF的程序流程如下:
下面是具体代码:
findORF <- function(seq){
#传入参数为DNA序列,注意方向一定要是5'到3'
findStartCodons <- function(seq){
#找起始密码子的函数
startcodons <- numeric(0) #创建空函数
k <- 1
for(i in 1:(length(seq)-5)){
#以密码子的第一位碱基位置计算,最后五位无需检查,因为长度过短
if(seq[i] == "a" && seq[i+1] == "t" && seq[i+2] == "g"){
#ATG对应起始密码子
startcodons[k] <- i #记录位置
k <- k + 1 #位置下标加一
}
}
return(startcodons) #返回结果
}
findStopCodons <- function(seq){
#找终止密码子的函数
stopcodons <- numeric(0) #创建空函数
k <- 1
for(i in 1:(length(seq)-2)){
#以密码子的第一位碱基位置计算
if((seq[i] == "t" && seq[i+1] == "a" && seq[i+2] == "a") || (seq[i] == "t" && seq[i+1] == "a" && seq[i+2] == "g") || (seq[i] == "t" && seq[i+1] == "g" && seq[i+2] == "a")){
#TAA TAG TGA对应终止密码子
stopcodons[k] <- i #记录位置
k <- k + 1 #位置下标加一
}
}
return(stopcodons) #返回结果
}
startcodon <- findStartCodons(seq) #找到所有的起始密码子
stopcodon <- findStopCodons(seq) #找到所有的终止密码子
usedStop <- numeric(0) #记录用过的终止密码子
ORFs <- character(0) #记录有效开放阅读框
k <- 1
for(i in startcodon){
#遍历所有起始密码子
for(j in stopcodon){
#遍历所有终止密码子
if((j-i)%%3==0 && j > i){
#如果在一个阅读框内,即两个密码子之间的位置为3的整数
if(j %in% usedStop){
#如果终止密码子被用过
break #跳出这次循环,到下一个起始密码子
}else if(j-i < 300){
#如果密码子之间的序列长度过短
break #同上
}else{
ORFs[k] <- paste(i, "to", j) #生成字符串,记录的结果如"1 to 3001"
usedStop[k] <- j #记录用过的终止密码子
k <- k + 1 #位置下标加一
break #跳出本次循环,到下一个起始密码子
}
}
}
}
return(ORFs) #返回结果
}
这种找ORF的算法比较简单快速,但相应地准确度会有所下降。在NCBI官网有更准确的算法。
结束语
在找到ORF后,就能将该ORF与数据库中的已知序列进行比对,从而预测该物种基因的组成与功能等有用信息。下次将会介绍Needleman-Wunsch这一序列全局比对算法,敬请期待!和有任何问题或想法欢迎留言和评论!
边栏推荐
- Working principle of genius telephone watch Z3
- Redis based distributed locks and ultra detailed improvement ideas
- ESP8266使用arduino连接阿里云物联网
- I2C bus timing explanation
- Rough analysis of map file
- C language, log print file name, function name, line number, date and time
- 基于Redis的分布式锁 以及 超详细的改进思路
- VSCode基础配置
- RT-Thread 线程的时间片轮询调度
- Missing value filling in data analysis (focus on multiple interpolation method, miseforest)
猜你喜欢
ES6语法总结--上篇(基础篇)
STM32 如何定位导致发生 hard fault 的代码段
Arm pc=pc+8 is the most understandable explanation
JS variable types and common type conversions
程序员老鸟都会搞错的问题 C语言基础 指针和数组
Walk into WPF's drawing Bing Dwen Dwen
共用体(union)详解【C语言】
数据分析之缺失值填充(重点讲解多重插值法Miceforest)
Comparaison des solutions pour la plate - forme mobile Qualcomm & MTK & Kirin USB 3.0
锂电池基础知识
随机推荐
Who says that PT online schema change does not lock the table, or deadlock
共用体(union)详解【C语言】
C language callback function [C language]
Kaggle竞赛-Two Sigma Connect: Rental Listing Inquiries
vim命令行笔记
Machine learning -- decision tree (sklearn)
Feature of sklearn_ extraction. text. CountVectorizer / TfidVectorizer
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
Detailed explanation of 5g working principle (explanation & illustration)
OSPF message details - LSA overview
A possible cause and solution of "stuck" main thread of RT thread
Dependency in dependencymanagement cannot be downloaded and red is reported
Custom view puzzle getcolor r.color The color obtained by colorprimary is incorrect
JS变量类型以及常用类型转换
[esp32 learning-2] esp32 address mapping
. elf . map . list . Hex file
列表的使用
Detailed explanation of Union [C language]
Mp3mini playback module Arduino < dfrobotdfplayermini H> function explanation
Pytoch temperature prediction