Это очень неэффективный и не-R-подобный способ подсчета количества символов между двумя шаблонами.
Вот альтернативный вариант использования gsub
, который должен помочь вам начатьи может быть расширен для учета других стоп-кодонов:
x <- c("a", "a", "a", "t", "a", "t", "g", "t", "c", "g", "t", "t", "t", "t", "a", "g")
nchar(gsub("[actg]*atg([actg]*)tag[actg]*", "\\1", paste0(x, collapse = "")))
#[1] 6
Более надежный и общий подход можно найти здесь с использованием Biostrings::matchPattern
.Я бы настоятельно рекомендовал не изобретать колесо здесь, а вместо этого рекомендовать использовать некоторые стандартные пакеты Bioconductor, которые были разработаны именно для таких задач.