Я пытаюсь разбить один файл FASTA (содержащий несколько последовательностей) на несколько меньших на основе идентификаторов, которые я храню в списке фреймов данных (и
У меня есть FASTA под названием fastafile вот так:
fastafile <- dput(fastafile)
structure(list(r1 = "acatattggaggccgaaacaatgaggcgtgatcaactcagtatatcac",
r2 = "ctaacctctcccagtgtggaacctctatctcatgagaaagctgggatgag",
r3 = "atttcctcctgctgcccgggaggtaacaccctggacccctggagtctgca",
r4 = "acatattggaggccgaaacaatgaggcgtgatcaactcagtatatcgg",
r5 = "ctaacctctcccagtgtggaacctctatctcatgagaaagctgggatgg",
r6 = "atttcctcctgctgcccgggaggtaacaccctggacccctggagtctgg"), .Names = c("r1",
"r2", "r3", "r4", "r5", "r6"))
который я загрузил с помощью такого пакета seqinr:
fastafile <- read.fasta(file = "fastafile.fasta",
seqtype = c("DNA","AA"),
as.string = TRUE, set.attributes = FALSE)
Я загружаю таблицу с моими идентификаторами и некоторыми значениями выражений
GOI <- read.table(header = TRUE, text = "ID T1 T2
1 r1 1.1 2.1
2 r2 1.2 2.2
3 r3 1.1 2.2
4 r4 1.2 2.1
5 r5 1.1 2.1
6 r6 1.2 2.2")
и разделить их на управляемые подмножества
GOI.split <- split(GOI,rep(1:3,each=2))
давая мне
> GOI.split
$`1`
ID T1 T2
1 r1 1.1 2.1
2 r2 1.2 2.2
$`2`
ID T1 T2
3 r3 1.1 2.2
4 r4 1.2 2.1
$`3`
ID T1 T2
5 r5 1.1 2.1
6 r6 1.2 2.2
Теперь я хотел бы разбить свои последовательности на подмножества на основе идентификаторов в GOI.split
фреймах данных. В этом фиктивном примере должно быть две последовательности для каждого элемента списка. Чтобы получить подмножество для первого из перечисленных фреймов данных, я могу сказать:
FASTA.1 <- fastafile[c(which(names(fastafile) %in% GOI.split[[1]][,1]))]
# $r1
# [1] "acatattggaggccgaaacaatgaggcgtgatcaactcagtatatcac"
#
# $r2
# [1] "ctaacctctcccagtgtggaacctctatctcatgagaaagctgggatgag"
(и так далее), однако я хотел бы выделить подмножество для всех фреймов данных одним быстрым движением, чтобы получить список с моими желаемыми фастами (3 элемента списка, содержащие, в данном случае, по 2 последовательности каждый). Я пытался:
FASTAs <- lapply(fastafile, function(i)
{fastafile[c(which(names(fastafile) %in% GOI.split[[i]][ ,1]))]})
Не мог бы кто-нибудь сказать мне, почему это не работает и что мне нужно делать вместо этого.
Спасибо
1.1
и1.2
, что странно в vanilla R, но, возможно, нормально в seqinr. - person Frank   schedule 19.06.2015GOI.split
элементов, 2. сопоставьте эти идентификаторы с именами последовательностей и 3. разделите исходный fasta таким же образом, какGOI.split
(и предпочтительно вернуть его в виде списка) . - person Moritz   schedule 19.06.2015dput(fastafile)
, а затем скопировать и вставить здесь результат. Это позволит другим копировать и вставлять данные в R. Взгляните на как задать воспроизводимый вопрос R для получения дополнительных указателей. - person Jota   schedule 19.06.2015