如何用循环在R的Biostrings中将多基因组DNAStringSet合并为单个变量?
循环合并多个DNAStringSet对象
问题背景
我在R中有一个包含多个Biostrings序列(基因组)的列表myseq,每个列表元素是包含4000条以上基因序列的DNAStringSet对象:
class(myseq) [1] "list" names(myseq) [1] "Genome-01" "Genome-02" "Genome-03" myseq[["Genome-01"]] DNAStringSet object of length 4368: width seq names [1] 516 ATGACAACTGAGCCAACAGTCATAATTGGACTGC...AACAAAAACCGTTTGCGGGTTAAGGAAAGCTGA CPLOIJDP_00001 [2] 408 ATGTCCAACACTGAATCGATCTGCGTATCAACGC...CAGCCAGAGCGCGTGGGCGAGTTTCATTTGTAA CPLOIJDP_00002 [4367] 76 GCGACACTAGCTCAGTTGGTAGAGCGCAACCTTG...AGGTCACGAGTTCGAACCTCGTGTGTCGCTCCA CPLOIJDP_04367 [4368] 72 GGTGGAGCAGCTTGGTAGCTCGTCGGGCTCATAA...AGGTCGTCGGTTCAAATCCGGCCCCCGCAACCA CPLOIJDP_04368
已知无需循环的合并方式:
allgenes <- c(myseq[[1]], myseq[[2]], myseq[[3]]) # 或按名称索引 allgenes <- c(myseq[["Genome-01"]], myseq[["Genome-02"]], myseq[["Genome-03"]])
但需要用循环实现,尝试以下代码失败:
allgenes <- c() for(i in 1:length(myseq)){ allgenes[i] <- myseq[[i]] }
正确的循环实现方法
问题出在初始化和赋值方式上:
- 不能用普通向量
c()初始化,必须初始化为空的DNAStringSet对象 - 不能用下标赋值
allgenes[i] <- ...,需要用c()函数将新的序列集合并到已有对象中
方法1:遍历列表元素
# 初始化空的DNAStringSet allgenes <- DNAStringSet() # 逐个合并每个基因组的序列集 for (seq_set in myseq) { allgenes <- c(allgenes, seq_set) }
方法2:按索引遍历
allgenes <- DNAStringSet() for (i in seq_along(myseq)) { allgenes <- c(allgenes, myseq[[i]]) }
这两种方式都能正确将所有基因组的序列合并为单个DNAStringSet对象。
内容的提问来源于stack exchange,提问作者abraham
相关产品推荐
相关产品推荐

