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