zl程序教程

您现在的位置是:首页 >  后端

当前栏目

使用R获取DNA的反向互补序列

序列 使用 获取 反向 dna 互补
2023-06-13 09:13:02 时间

前面跟大家聊了一下☞R如何reverse一个字符串,其实这个只能实现反向,那怎么样才能实现互补呢?其实获取DNA的反向互补序列这个事情本身并不是很难。有很多网页工具都能够实现,我随便在网上搜了一下就找到3个。我这里只是想结合R语言来解决我们生物信息里面的一些小问题,帮助大家理解R。我们还是用上次的DNA序列来举例

DNA='ATTTAGCGATGCGGCTATGCTATCGGA'

如果大家只是想解决这个问题,可以使用下面提到的三个网页工具

1.https://www.bioinformatics.org/sms/rev_comp.html

将你的序列贴进对话框,点击SUBMIT就能得到方向互补序列

2.https://arep.med.harvard.edu/labgc/adnan/projects/Utilities/revcomp.html

你会发现这个工具不仅可以得到反向互补序列,还可以得到反向序列,互补序列,看你自己的需求是什么。将你的序列贴进对话框,点击reverse complement就能得到反向互补序列

3.http://www.cellbiol.com/cgi-bin/complement/rev_comp.cgi

将你的序列贴进对话框,点击Do the Job!就可以得到反向互补序列了

接下来我们用R语言来实现这个功能,我还是给大家介绍两种不同的方法。一种是比较原始一点的方法。第二种是站在前人的肩膀上,使用已有的R包来实现。

1.使用strsplit,rev,paste等R自带的函数来实现

DNA='ATTTAGCGATGCGGCTATGCTATCGGA'
#定义互补配对的表
from=c("A","T","G","C","a","g","t","c","N","n")
to  =c("T","A","C","G","t","c","a","g","N","n")
#得到带有名字的向量,名字是原始碱基,值是互补碱基
names(to)=from

#字符串拆分成字符串向量
sep_DNA=unlist(strsplit(DNA,""))
#获取互补序列
complementary_DNA=to[sep_DNA]
#获取反向序列
rev_complementary=rev(complementary_DNA)
#将字符串向量粘贴成字符串
rev_complementary_DNA=paste(rev_complementary,collapse = "")
#输出反向互补序列
rev_complementary_DNA

2.使用mgsub包中的mgsub函数

#安装mgsub和stringi
BiocManager::install("mgsub")
BiocManager::install("stringi")
#加载mgsub和stringi
library(mgsub)
library(stringi)
DNA='ATTTAGCGATGCGGCTATGCTATCGGA'
#使用mgsub获取互补序列
complementary_DNA=mgsub(DNA,   #原始序列
                    c("A","T","G","C","a","g","t","c","N","n"),  #原始碱基
                    c("T","A","C","G","t","c","a","g","N","n")   #互补碱基
                     )
#使用stri_reverse获取反向序列
rev_complementary_DNA=stri_reverse(complementary_DNA)
#输出反向互补序列
rev_complementary_DNA

参考资料:R如何reverse一个字符串