比较5个k-mer矢量并找到独特的矢量

时间:2019-02-07 08:28:45

标签: r compare subset sequence bioinformatics

我有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)

1 个答案:

答案 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]
})