#r #split #sequence-alignment
#r #разделение #выравнивание последовательности
Вопрос:
Я пытаюсь извлечь набор выровненных последовательностей из последовательности, с помощью которой выполняется выравнивание последовательности (объект выравнивания) SeqinR
.
под dput()
alignment
объектом S4)
structure(list(nb = 39, nam = c("Lip4", "pdb|5FRD|A", "pdb|1M33|A",
"pdb|5H3H|B", "pdb|1HL7|B", "pdb|1A8S|A", "pdb|1WPR|B", "pdb|4JYM|A",
"pdb|2OCI|A", "pdb|1XRO|A", "pdb|3OOS|A", "pdb|2RHW|A", "pdb|2WUF|B",
"pdb|1IUP|A", "pdb|4LXI|A", "GBD36331.1", "ADV62823.1", "KRA67074.1",
"WP_030056103.1", "OHD12261.1", "WP_084594117.1", "WP_091643197.1",
"OGO52173.1", "KFN38864.1", "GBC76610.1", "PKN85453.1", "ACU30832.1",
"KPJ59441.1", "WP_028052179.1", "OGN93027.1", "OGO32450.1", "PSN93892.1",
"ESQ22364.1", "WP_069806679.1", "WP_013336464.1", "WP_066315780.1",
"KRT77961.1", "OIO07272.1", "WP_009823005.1"), seq = list("ygglgwvdnrggsadlgvsmggaplllplgdpilhf",
"-----w-dlpngsay-ghslggapllyplgdpilhf", "wgglgwldlpggsaxagwslggapltlplgdpwsh-",
"vggmgfydyrggsadlgfsmggagllldlgdpilhy", "ygglgwvdrrggsadlgfsmgtlglfvplgdpvyhf",
"yggfgwvdrrggsadlgfstggvgallplgdpvlhf", "-ggfgwvdyvggsadlghsvgagplmlplcdpllhy",
"-gglgwvdnmggtsdlghsvsagpimlphsdplvhh", "ygglgfvdprggsadlgwsdggapmi-plgdpvlhf",
"ykptgyvdqfggsvelgssyggaqlviplgdpilhf", "------vnlkggsidlghsaggaqivlpfgdpilhf",
"yggmgwvdspgnsaalgnamggaplllkfgdpilhf", "ygglgwvdqpggsaalgnalggapllvplgdpilhf",
"ygglgyvdmvggtvhlgnafggasml-plgdpilhf", "ygglgrvdmvggtthlgnamggaplllplgdpighf",
"-gglgvvelrgarvdlgvsfggapvalplgdpihhf", "-ggmglvslrggsadlgvsfggvplllplgdpifhc",
"ygglgwvfqiggsvylgesfggvp-llplgdpifhf", "ygglgwvylrghssdlgwsyggvglllplgdpllhf",
"ygglgwvdnrggsadaglsmggaplllplgdpilhf", "fgglgwvdnrggtadagvsmggaplllplgdpilhf",
"ygglgwvdnrggsadagvsmggapmllplgdpllhf", "ygglgwvdnrdgsadlgvsmggapllvplgdpilhf",
"ygglgwvdnrggsadlgismggaplllplgdpllhf", "ygglgwtdnrggsadlghsmggaplllplgdpilhf",
"ygglgwvdnrggsadlglsmggapllapmadplmhf", "----gwcdnrggsadlgvsmggapvllplgdpiehf",
"ygglgwvdnrggtadqgvsvggapllvplgdpilhf", "yggcgwldnrggsadlgismggaplllplgdhilhf",
"ygglgfvdnrggsadvgismggaplllplgdpilhf", "yggmgyldnrggsadigasmggaplllplgdsilhf",
"ygglgwldnrggsadlgvsmggaplllplgdpilhf", "ygglgwldnrggstdlgvsmggadlllplgdnilhf",
"ygglgwldnrggsvdlgvsmggaplllplgdpilhf", "ygglgwldnrggsadlgfsmggaglllptgdpifhh",
"ygglgwvdnrggtadqgvsmggapllvklgdpiehf", "ygglgwvdnrggsadlgaslggaplllplgdpilhf",
"ygglgwvdnrggsadlgaslggaallpplgdpilhf", "ygglgwvdnrggsgdlgwslgglgallplgdpilhf"),
com = NA), class = "alignment")
Я пытаюсь таким образом:
library(seqinr)
fas <- read.alignment("data.fa")
n <- c("OGO52173.1", "KFN38864.1", "GBC76610.1")
sub_fas <- fas[ fas$nam %in% n ]
Но я получаю объект другого типа, показанный ниже с dput()
:
structure(list(39, c("Lip4", "pdb|5FRD|A", "pdb|1M33|A", "pdb|5H3H|B",
"pdb|1HL7|B", "pdb|1A8S|A", "pdb|1WPR|B", "pdb|4JYM|A", "pdb|2OCI|A",
"pdb|1XRO|A", "pdb|3OOS|A", "pdb|2RHW|A", "pdb|2WUF|B", "pdb|1IUP|A",
"pdb|4LXI|A", "GBD36331.1", "ADV62823.1", "KRA67074.1", "WP_030056103.1",
"OHD12261.1", "WP_084594117.1", "WP_091643197.1", "OGO52173.1",
"KFN38864.1", "GBC76610.1", "PKN85453.1", "ACU30832.1", "KPJ59441.1",
"WP_028052179.1", "OGN93027.1", "OGO32450.1", "PSN93892.1", "ESQ22364.1",
"WP_069806679.1", "WP_013336464.1", "WP_066315780.1", "KRT77961.1",
"OIO07272.1", "WP_009823005.1"), list("ygglgwvdnrggsadlgvsmggaplllplgdpilhf",
"-----w-dlpngsay-ghslggapllyplgdpilhf", "wgglgwldlpggsaxagwslggapltlplgdpwsh-",
"vggmgfydyrggsadlgfsmggagllldlgdpilhy", "ygglgwvdrrggsadlgfsmgtlglfvplgdpvyhf",
"yggfgwvdrrggsadlgfstggvgallplgdpvlhf", "-ggfgwvdyvggsadlghsvgagplmlplcdpllhy",
"-gglgwvdnmggtsdlghsvsagpimlphsdplvhh", "ygglgfvdprggsadlgwsdggapmi-plgdpvlhf",
"ykptgyvdqfggsvelgssyggaqlviplgdpilhf", "------vnlkggsidlghsaggaqivlpfgdpilhf",
"yggmgwvdspgnsaalgnamggaplllkfgdpilhf", "ygglgwvdqpggsaalgnalggapllvplgdpilhf",
"ygglgyvdmvggtvhlgnafggasml-plgdpilhf", "ygglgrvdmvggtthlgnamggaplllplgdpighf",
"-gglgvvelrgarvdlgvsfggapvalplgdpihhf", "-ggmglvslrggsadlgvsfggvplllplgdpifhc",
"ygglgwvfqiggsvylgesfggvp-llplgdpifhf", "ygglgwvylrghssdlgwsyggvglllplgdpllhf",
"ygglgwvdnrggsadaglsmggaplllplgdpilhf", "fgglgwvdnrggtadagvsmggaplllplgdpilhf",
"ygglgwvdnrggsadagvsmggapmllplgdpllhf", "ygglgwvdnrdgsadlgvsmggapllvplgdpilhf",
"ygglgwvdnrggsadlgismggaplllplgdpllhf", "ygglgwtdnrggsadlghsmggaplllplgdpilhf",
"ygglgwvdnrggsadlglsmggapllapmadplmhf", "----gwcdnrggsadlgvsmggapvllplgdpiehf",
"ygglgwvdnrggtadqgvsvggapllvplgdpilhf", "yggcgwldnrggsadlgismggaplllplgdhilhf",
"ygglgfvdnrggsadvgismggaplllplgdpilhf", "yggmgyldnrggsadigasmggaplllplgdsilhf",
"ygglgwldnrggsadlgvsmggaplllplgdpilhf", "ygglgwldnrggstdlgvsmggadlllplgdnilhf",
"ygglgwldnrggsvdlgvsmggaplllplgdpilhf", "ygglgwldnrggsadlgfsmggaglllptgdpifhh",
"ygglgwvdnrggtadqgvsmggapllvklgdpiehf", "ygglgwvdnrggsadlgaslggaplllplgdpilhf",
"ygglgwvdnrggsadlgaslggaallpplgdpilhf", "ygglgwvdnrggsgdlgwslgglgallplgdpilhf"),
NA, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL), .Names = c("nb", "nam", "seq", "com",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA))
Кроме того, я не получаю подмножество на основе списка n
.
В этом примере я ожидаю тот же объект, что и fas
, но только с 3 элементами, содержащимися в переменной n
.
Заранее спасибо
Ответ №1:
Я уверен, что, возможно, есть лучший способ сделать это.
Но я решил с помощью хитрости.
Прежде всего, я импортирую файл с read.fasta
no read.alignment
, я все еще использую seqinr
.
fas <- read.fasta("file.fa")
После этого я создаю tibble
фильтр на основе моего списка и использую as.alignment
который является конструктором для объекта выравнивания.
tibble(x) %>%
cbind(names = names(x)) %>%
filter(names %in% n) %>%
as.alignment(nb = nrow(.), seq = pull(., x), nam = pull(., names))
С этим я сделал то, что мне было нужно.
Улучшения абсолютно полезны и приемлемы. В любом случае, спасибо. Я надеюсь, что это может кому-то помочь.
Ответ №2:
align <- read.alignment("fastafile",format="fasta")
align.temp.nam <- align$nam[align$nam %in% n]
align.temp.seq <- align$seq[align$nam %in% n]
align.sub <- as.alignment(nb=length(align.temp.nam),nam=align.temp.nam,seq=align.temp.seq)