Как я могу остановить цикл while и запустить другой цикл while, с которого начался предыдущий - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь посчитать буквы в списке, пропустив 1 букву и сгруппировав их по три, пока не найду «tac» во фрейме данных, а затем я хочу сгруппировать остальные из трех, пропустив 3 буквы, пока я найти "att"

пример того, что я пытаюсь сказать:

"agttacgtaattatgat"

это должно сделать:

agt,gtt,tta,tac  stop, gta,att  stop ,atg,tga,gat

(имя фрейма данных агент )

мой код для этого:

 y=c() 
x=1 
while(x<853){ 
  x=x+1
 rt<-paste(agen[x],agen[x+1],agen[x+2])
  y=c(y,rt)
  ff<-data.frame(y)
  if(ff=="t a c"){break}
}

ay=c()
while(x<853){                            
  x=x+3
  art<-paste(agen[x],agen[x+1],agen[x+2])
  ay=c(ay,art)
  aff<-data.frame(ay)
  if(aff=="a t t"){break}
}

первый работает нормально, а второй не ломается.

в коде будет много остановок и запусков, так что вы можете помочь мне написать цикл, который может выполнить эту работу?

1 Ответ

0 голосов
/ 07 мая 2019

Думаю, я примерно знаю, что вам нужно, но вот пример кода, который, возможно, делает то, что вам нужно. Я использовал указанный вами пример и использовал вектор с вашими ДНК-основами в качестве элементов вместо «фрейма данных». Я также изменил некоторые вещи стиля.

agen_string <- "agttacgtaattatgat"
# Is not a data frame, but a vector. I don't know, why you try to use a data frame.
agen <- strsplit(agen_string, split = "")[[1]]

y <- c()
x <- 0 # Start with 0. Otherwise, you wouldn't find 'tac' in the beginning
# Search for 'tac' triplett
while(x < length(agen)){
  x <- x + 1
  rt <- paste(agen[x], agen[x+1], agen[x+2], sep = "")
  print(rt)
  y <- c(y, rt)
  #ff <- data.frame(y)
  if(rt == "tac"){
    print("stop")
    break
  }
}

ay <- c()
while(x < length(agen)) {                            
  x <- x + 3
  art <- paste(agen[x], agen[x+1], agen[x+2], sep = "")
  print(art)
  ay = c(ay,art)
  #aff<-data.frame(ay)
  if(art == "att"){
    print("stop")
    break
  }
}

Если вы больше работаете с последовательностями ДНК, вы можете использовать более специализированный R-пакет, такой как, например, Biostrings.

...