Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 发展核苷酸序列_R_Regex_Bioinformatics_Dna Sequence - Fatal编程技术网

R 发展核苷酸序列

R 发展核苷酸序列,r,regex,bioinformatics,dna-sequence,R,Regex,Bioinformatics,Dna Sequence,我想发展以下形式的表达: a <- "[AGAT]5GAT[AGAT]7[AGAC]6AGAT" a我们使用gsub创建1s,其中[('a1')之前没有数字,然后分别提取字母和数字('v1','v2'),使用strep进行复制,并将子字符串粘贴到单个字符串('res') -与“b”核对 identical(res, b) #[1] TRUE 一个稍微紧凑的正则表达式是改变第一步 a1 <- gsub("(?<=[A-Z])(?=\\[)|(?<=[A-Z]

我想发展以下形式的表达:

a <- "[AGAT]5GAT[AGAT]7[AGAC]6AGAT"

a我们使用
gsub
创建1s,其中
[
('a1')之前没有数字,然后分别提取字母和数字('v1','v2'),使用
strep
进行复制,并
将子字符串粘贴到单个字符串('res')

-与“b”核对

identical(res, b)
#[1] TRUE

一个稍微紧凑的正则表达式是改变第一步

a1 <- gsub("(?<=[A-Z])(?=\\[)|(?<=[A-Z])$", "1", a, perl = TRUE)
v1 <- str_extract_all(a1, '[A-Z]+')[[1]]
v2 <- str_extract_all(a1, "[0-9]+")[[1]]
res1 <- paste(strrep(v1, as.numeric(v2)), collapse="")
identical(res1, b)
#[1] TRUE
a1试试这个:

a<-"[AGAT]5GAT[AGAT]7[AGAC]6AGAT"

   list<-unlist(strsplit(unlist(strsplit(a,"\\]")),"\\["))

   number<-suppressWarnings(as.numeric(gsub("([0-9]+).*$", "\\1", list)))
   number[is.na(number)]<-1  
   seq<-gsub('[0-9]+', '', list)

   out<-paste(rep(seq[2:(length(seq))],number[c(3:length(number),2)]),collapse = '')

 b="AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT"

out==b
[1] TRUE

a能否满足您的预期输出。如果需要复制
[]
中的字母,看起来就不一样了,如果您可以得到类似
a=[AGAT]5[GAT]1[AGAT]7[AGAC]6[AGAT]的内容,事情会简单得多1
而不是从生成表达式的过程中。这是一种更为一致的格式。@安东尼奥斯克我完全同意你的观点,但生物学家有他们的逻辑……但我们必须理解的是,你的解决方案没有给出正确的输出。GAT(第二位)和AGAT(最后一位)缺少。@DJack我正在复制
[]中的字母
。您想要哪一个?是内部的还是外部的?谢谢您的帮助,但是这不是正确的解决方案,因为输出不好。括号之间的数字必须重复括号后面的数字所指示的次数。如果没有括号,就没有重复。@yach这很混乱。例如le
[AGAT]5
似乎AGAT被复制了5次,然后接下来
[AGAT]7
也被复制了7次?这里有一个更可读的输出:AGATAGATAGATAGATAGAT GAT AGATAGATAGATAGATAGAT agacagagaac AGAT
identical(res, b)
#[1] TRUE
a1 <- gsub("(?<=[A-Z])(?=\\[)|(?<=[A-Z])$", "1", a, perl = TRUE)
v1 <- str_extract_all(a1, '[A-Z]+')[[1]]
v2 <- str_extract_all(a1, "[0-9]+")[[1]]
res1 <- paste(strrep(v1, as.numeric(v2)), collapse="")
identical(res1, b)
#[1] TRUE
a <- '[AGAT]5GAT[AGAT]7[AGAC]6AGAT'
b <- 'AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT'
a<-"[AGAT]5GAT[AGAT]7[AGAC]6AGAT"

   list<-unlist(strsplit(unlist(strsplit(a,"\\]")),"\\["))

   number<-suppressWarnings(as.numeric(gsub("([0-9]+).*$", "\\1", list)))
   number[is.na(number)]<-1  
   seq<-gsub('[0-9]+', '', list)

   out<-paste(rep(seq[2:(length(seq))],number[c(3:length(number),2)]),collapse = '')

 b="AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT"

out==b
[1] TRUE