Сравните 5 k-мерных векторов и найдите уникальные - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть 5 различных последовательностей бактерий, и я нашел их подпоследовательности с помощью kmers.Теперь у меня есть список подпоследовательностей, но мне нужно сравнить эти списки, чтобы найти уникальные.Я имею в виду подпоследовательность, которая найдена только в одной последовательности, но не найдена ни одна другая последовательность.Как я могу сравнить эти несколько подпоследовательностей?PS: я начну с длины = 15, чтобы найти подпоследовательность с минимальной длиной в каждой последовательности.

Я получил 5 k-мер 5 разных последовательностей.У меня есть 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)

1 Ответ

0 голосов
/ 07 февраля 2019

Я не уверен на 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 = 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]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...