2
我試圖子集的一個FASTA文件(包含多個序列)轉換成基於ID的幾個較小的餘存儲在數據幀(和子集序列的數據幀
的列表我有一個名爲fastafile這樣FASTA:
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)
我打開一個表,我的ID和一些表達VAL UE的
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
數據幀的ID,以我的子集序列。在這個模擬的例子中,它應該是每個列表項目的兩個序列。要獲得列出的數據幀的第一個子集,我可以說:
FASTA.1 <- fastafile[c(which(names(fastafile) %in% GOI.split[[1]][,1]))]
# $r1
# [1] "acatattggaggccgaaacaatgaggcgtgatcaactcagtatatcac"
#
# $r2
# [1] "ctaacctctcccagtgtggaacctctatctcatgagaaagctgggatgag"
(等等),但是我想子集在一個迅速移動的所有數據幀和我的期望列表fastas(3個列表項目,每個包含2個序列)。我試過了:
FASTAs <- lapply(fastafile, function(i)
{fastafile[c(which(names(fastafile) %in% GOI.split[[i]][ ,1]))]})
有人請告訴我爲什麼這不起作用,而我必須做的。
感謝
一可能需要可複製的fastafile摘錄。對我來說,看起來你正在選擇名稱爲'1.1'和'1.2'的列,這在香草R中很奇怪,但在seqinr中可能是正常的。 – Frank
@Frank謝謝,我想添加一個可重複的摘錄,但我不知道如何。任何指針都是受歡迎的。 – Moritz
@Frank&謝謝讓我意識到我沒有成功地讓自己清晰。我想要R做的事情是:1.選擇我的'GOI.split'項目的ID列,2.將這些ID與序列名稱匹配並且3.以與分割GOI.split'相同的方式分割原始fasta並優先將其作爲列表返回)。 – Moritz