我有5种不同的细菌序列,我通过kmers发现了它们的亚序列。现在,我有了子序列列表,但是我需要比较此列表以查找唯一序列。我的意思是只能在1个序列中找到一个子序列,但在其他任何序列中都找不到。如何比较这些多个子序列? PS:我将从length = 15开始,在每个序列中找到最小长度的子序列。
我有5个不同序列的5个k-mers。我有5个列表,这些列表显示length = 15的任何子序列以及它们在序列中找到了多少。现在,我应该比较这5个列表并找到唯一的列表。
##### First of all, I read the 5 different sequences from my PC. #
>
kmers1 = get.kmers(.data= mseq1, .head=-1, .k=15, .clean= T, .meat= F, .verbose= T, .left.shift=0, .right.shift=0)
>
kmers2 = get.kmers(.data= mseq2, .head=-1, .k=15, .clean= T, .meat= F, .verbose= T, .left.shift=0, .right.shift=0)
>
kmers3 = get.kmers(.data= mseq3, .head=-1, .k=15, .clean= T, .meat= F, .verbose= T, .left.shift=0, .right.shift=0)
>
kmers4 = get.kmers(.data= mseq4, .head=-1, .k=15, .clean= T, .meat= F, .verbose= T, .left.shift=0, .right.shift=0)
>
kmers5 = get.kmers(.data= mseq5, .head=-1, .k=15, .clean= T, .meat= F, .verbose= T, .left.shift=0, .right.shift=0)
答案 0 :(得分:1)
我不是100%确定数据的格式,但这是一种在子序列列表中查找唯一值的方法:
# function to simulate random sequences of length n
sim_seq = function(n) paste(sample(c("A", "C", "G", "T"), 100, rep=T), collapse="")
# simulate 3 random sequences each 100 bases long
seqs = lapply(c(100, 100, 100), sim_seq)
# function to split sequence into kmers of length n
kmer = function(x, n) sapply(1:(nchar(x)-n), function(i) substr(x, i, i + n))
# split seqs into kmers of length 5
kmer_list = lapply(seqs, kmer, 5)
编辑2
好吧,我想我明白了-这行得通吗?
首先列出五套kmers。称之为kmer_list。然后使用此lapply调用获取每5个序列中唯一子序列的列表。
kmer_list =列表(kmer1,kmer2 ...)
unique_seqs = lapply(1:length(kmer_list), function(i){
seq = kmer_list[[i]]
target = unlist(kmer_list[-i])
seq[!seq %in% target]
})