r语言 - 比较 5 个 k-mer 向量并找到独特的向量



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

我得到了 5 个不同序列的 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_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]
})

相关内容

  • 没有找到相关文章