R 补体DNA序列

R 补体DNA序列,r,replace,bioinformatics,genetics,complement,R,Replace,Bioinformatics,Genetics,Complement,假设我有一个DNA序列。我想得到它的补充。我使用了以下代码,但我不明白。我做错了什么 s=readline() ATCTCGGCGCGCATCGCGTACGCTACTAGC p=unlist(strsplit(s,"")) h=rep("N",nchar(s)) unlist(lapply(p,function(d){ for b in (1:nchar(s)) { if (p[b]=="A") h[b]="T" if (p[b]=="T") h[b]="A" i

假设我有一个DNA序列。我想得到它的补充。我使用了以下代码,但我不明白。我做错了什么

s=readline()
ATCTCGGCGCGCATCGCGTACGCTACTAGC
p=unlist(strsplit(s,""))
h=rep("N",nchar(s))
unlist(lapply(p,function(d){
for b in (1:nchar(s)) {    
    if (p[b]=="A") h[b]="T"
    if (p[b]=="T") h[b]="A"
    if (p[b]=="G") h[b]="C"
    if (p[b]=="C") h[b]="G"
}
如果您不需要互补名称,您可以始终使用
unname
将其删除

unname(sapply(p, switch,  "A"="T", "T"="A","G"="C","C"="G") )
 [1] "T" "A" "G" "A" "G" "C" "C" "G" "C" "G" "C" "G" "T" "A" "G" "C" "G" "C"
[19] "A" "T" "G" "C" "G" "A" "T" "G" "A" "T" "C" "G"
> 

使用为此目的而构建的
chartr

> s
[1] "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
> chartr("ATGC","TACG",s)
[1] "TAGAGCCGCGCGTAGCGCATGCGATGATCG"
只要给它两个等长的字符串和你的字符串。还对翻译的论点进行了矢量化:

> chartr("ATGC","TACG",c("AAAACG","TTTTT"))
[1] "TTTTGC" "AAAAA" 
注意,我在替换DNA的字符串表示,而不是向量。要转换向量,我将创建一个查找映射作为命名向量和索引,该索引:

> p
 [1] "A" "T" "C" "T" "C" "G" "G" "C" "G" "C" "G" "C" "A" "T" "C" "G" "C" "G" "T"
[20] "A" "C" "G" "C" "T" "A" "C" "T" "A" "G" "C"
> map=c("A"="T", "T"="A","G"="C","C"="G")
> unname(map[p])
 [1] "T" "A" "G" "A" "G" "C" "C" "G" "C" "G" "C" "G" "T" "A" "G" "C" "G" "C" "A"
[20] "T" "G" "C" "G" "A" "T" "G" "A" "T" "C" "G"
对于这种操作,包有许多有用的函数。安装一次:

source("http://bioconductor.org/biocLite.R")
biocLite("Biostrings")
然后使用

library(Biostrings)
dna = DNAStringSet(c("ATCTCGGCGCGCATCGCGTACGCTACTAGC", "ACCGCTA"))
complement(dna)

还有一个软件包Sekinr

library(seqinr)
comp(seq) # gives complement
rev(comp(seq)) # gives the reverse complement

Biostrings的内存配置文件要小得多,但seqinr也很好,因为您可以选择碱基的大小写(包括混合),并将它们更改为您想要的任何内容,例如,如果您想要在相同的序列中混合T和U。Biostring强制您使用T或U。要补充,在大写和小写中,您可以使用
chartr()


n这里是一个使用基数r的答案。使用可怕的格式编写,以使事情清楚明了,并保持一行。它支持大写和小写

revc = function(s){
       paste0(
           rev(
            unlist(
             strsplit(
                chartr("ATGCatgc","TACGtacg",s)
                      , "")                        # from strsplit
                   )                               # from unlist
               )                                   # from rev
             , collapse='')                        # from paste0
       }

我用
sekinr
包概括了解决方案
rev(comp(seq))

install.packages("devtools")
devtools::install_github("TomKellyGenetics/tktools")
tktools::revcomp(seq)
此版本与字符串输入兼容,并被矢量化以处理多个字符串的列表或向量输入。输出类应该与输入匹配,包括案例和类型。这也支持包含RNA和RNA输出序列“U”的输入

> seq <- "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
> revcomp(seq)
[1] "GCTAGTAGCGTACGCGATGCGCGCCGAGAT"

> seq <- c("TATAAT", "TTTCGC", "atgcat")
> revcomp(seq)
  TATAAT   TTTCGC   atgcat 
 "ATTATA" "GCGAAA" "atgcat" 
>序号revcomp(序号)
[1] “gctagtagcgtacgcgatgcgcgcgcagat”
>序号revcomp(序号)
TATAAT TTTCGC atgcat
“附件”“GCGAAA”“atgcat”

查看或github包存储库。

太好了,我从来都不知道
开关
功能。似乎是为这个目的定制的。可能是由没有美感的人定制的!:)我不确定这是否完全准确:comp(“u”)返回值NA@TomKelly序列必须是字符向量的形式,每个字符的长度为1。杰里米忘了提到的是,如果是一个字符,你需要首先剪切序列。要重写,这应该可以:
comp(s2c(seq))
@YoannPageaud我实际上在这里添加了对字符串(任意长度)的支持作为函数:@YoannPageaud否,问题是不支持“U”。“A”或“T”的输入同样有效。```>图书馆(seqinr)>comp(“t”)[1]“a”>comp(“u”)[1]NA>comp(“a”)[1]“t”>comp(c(“u”)[1]NA>comp(c(“u”)[1]NA>comp(c(“t”)[1]“a”>comp(s2c(“u”)[1]NA```
revc = function(s){
       paste0(
           rev(
            unlist(
             strsplit(
                chartr("ATGCatgc","TACGtacg",s)
                      , "")                        # from strsplit
                   )                               # from unlist
               )                                   # from rev
             , collapse='')                        # from paste0
       }
install.packages("devtools")
devtools::install_github("TomKellyGenetics/tktools")
tktools::revcomp(seq)
> seq <- "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
> revcomp(seq)
[1] "GCTAGTAGCGTACGCGATGCGCGCCGAGAT"

> seq <- c("TATAAT", "TTTCGC", "atgcat")
> revcomp(seq)
  TATAAT   TTTCGC   atgcat 
 "ATTATA" "GCGAAA" "atgcat"