比较5个k-mer向量并找到唯一的

比较5个k-mer向量并找到唯一的,r,compare,subset,sequence,bioinformatics,R,Compare,Subset,Sequence,Bioinformatics,我有5种不同的细菌序列,我通过kmers发现了它们的子序列。现在我有了子序列的列表,但我需要比较这些列表以找到唯一的子序列。我的意思是一个子序列,只在一个序列中找到,但在其他序列中找不到。如何比较这些多个子序列? PS:我将从长度=15开始,在每个序列中找到最小长度的子序列 我得到了5个不同序列的k-mers。我有5个列表,显示长度为15的任何子序列,以及它们在序列中找到了多少。现在,我应该比较这5个列表并找到唯一的 ##### First of all, I read the 5 differ

我有5种不同的细菌序列,我通过kmers发现了它们的子序列。现在我有了子序列的列表,但我需要比较这些列表以找到唯一的子序列。我的意思是一个子序列,只在一个序列中找到,但在其他序列中找不到。如何比较这些多个子序列? PS:我将从长度=15开始,在每个序列中找到最小长度的子序列

我得到了5个不同序列的k-mers。我有5个列表,显示长度为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)

我不能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

好的,我想我明白了,这行吗

首先列出五组KMER。称之为kmer_列表。然后使用这个lappy调用获得每5个序列中唯一子序列的列表

kmer_list=列表(kmer1,kmer2…)


在那之后,我写这些代码只是为了得到子序列;list1=kmers1[1]list2=kmers2[1]list3=kmers3[1]list4=kmers4[1]list5=kmers5[1],所以我有5个向量,比如;9996 TTTTTT CTTTCGGCC 99961 TTTTTT CTTTGAGG 99962 TTTTTTTT GACTCAAGG 99963 TTTTTT GAGTTTTATT9964 TTTTTT GATTCAAA 99965 TTTTTT GCGGGACCT 99966 TTTTTT GCGTACGTT 99967 TTTTTT GCTGGGGGA 99968 TTTTTTTT GGGTCGCTA 99969 TTTTTTTT GGGGGGGCG 99970 TTTTTTTTTTTTTT GTGTGCG ATACTA 99971 TTTTTTTTTT GTCAATCAAGAGG 99972 TTTTTTTTTTTTTTTTTTGAGGGCGCGCG 99973 TTTTTTTTTTTTTTGCGCG 99975TTTTTTTTGAGTTAT 99976 TTTTTTTTTTGATATCAI无法编辑评论,我知道它看起来很糟糕。我希望你能理解。另外,我想比较这5种不同的向量。我应该消除常见的,最后我希望有独特的。我写了你的代码,它只显示了一组的子序列。好的,那么你想要一个长度为5的列表,每个序列中都有唯一的子序列?我写的代码找到所有唯一的子序列,并将它们放在一个向量中。显示的数字显示它们的行号。我从每个序列中得到了96k个k-mers。我只是复制了最后一行,所以它们是最后一行。
unique_seqs = lapply(1:length(kmer_list), function(i){
  seq = kmer_list[[i]]
  target = unlist(kmer_list[-i])
  seq[!seq %in% target]
})