Как найти подстроку из строки в R?
Если моя строка представляет собой последовательность ДНК,
x<-"TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"
Я хочу извлечь подстроку из ATG в TAA, TGA или TAG. Я могу извлечь из одной точки в другую с помощью пакета string i с регулярным выражением.
Мой код
stri_extract_all(x, regex = "ATG.*?TAA")
Помогите мне решить мой вопрос.
2 ответа
Я верю что ты имел ввиду str_extract_all
от stringr
пакет. Эта функция не имеет аргумента под названием regex
; тебе нужно pattern
, Как только вы получите, вы можете просто использовать или |
разрешить любое из окончаний последовательности.
library(stringr)
str_extract_all(x, pattern="ATG.*?(TAA|TGA|TAG)")
[[1]]
[1] "ATGCAACGAGGGGCATAA" "ATGCCCAAAATCTGA" "ATGACCGGGTAG"
Вот возможность использования Biostrings
:
library("Biostrings")
x <- "TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"
# Get all combinations of substrings starting with "ATG" and ending with "TAA"
library(tidyverse)
df <- expand.grid(start(matchPattern("ATG", x)), end(matchPattern("TAA", x))) %>%
filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);
extractAt(BString(x), IRanges(df[, 1], df[, 2]));
#A BStringSet instance of length 3
# width seq
#[1] 18 ATGCAACGAGGGGCATAA
#[2] 44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
#[3] 20 ATGCCCAAAATCTGATATAA
Поскольку вы работаете с данными последовательности ДНК, я рекомендую ознакомиться с Biostrings
от Биокондуктора. Существует много пакетов Bioconductor за пределами Biostrings
это облегчит вашу жизнь (в будущем), когда вы работаете с данными последовательности ДНК / РНК.
Обновить
Чтобы учесть несколько стоп-кодонов, просто оберните end(matchPattern(...))
в пределах sapply
петля.
df <- expand.grid(
start(matchPattern("ATG", x)),
unlist(sapply(c("TAA", "TGA", "TAG"), function(ss) end(matchPattern(ss, x))))) %>%
filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);
extractAt(BString(x), IRanges(df[, 1], df[, 2]));
# [1] 18 ATGCAACGAGGGGCATAA
# [2] 44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
# [3] 20 ATGCCCAAAATCTGATATAA
# [4] 39 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGA
# [5] 15 ATGCCCAAAATCTGA
# ... ... ...
# [7] 23 ATGCCCAAAATCTGATATAATGA
# [8] 4 ATGA
# [9] 55 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG
#[10] 31 ATGCCCAAAATCTGATATAATGACCGGGTAG
#[11] 12 ATGACCGGGTAG