Анализ парных последовательностей - поиск индексов уникальных комбинаций - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть большой список последовательностей ДНК {A, C, T, G} (всего 100 000 списков, каждый с 3000 символов). Мне нужно проанализировать эти списки попарно, начиная с 1-го списка и сравнивая его со 2-м, 3-м, 4-м, ..., 100 000-м. Затем перейдите ко 2-му списку и сравните его с 3-м, 4-м, ..., 100 000-м и т. Д.

В каждом парном сравнении мне нужно найти индексы уникальных комбинаций элементов. Например:

List1 = "A", "C", "A", "G", "T", "A", "C", "T", "C ".

List2 =" A "," G "," G "," G "," C "," A "," G "," G "," C " .

Мой желаемый результат:

AA = {1, 6}

CG = {2, 7}

AG = {3}

GG = {4}

T C = {5}

TG = {8}

CC = {9}

Я пытался кодировать это, используя Rcpp с for циклами и if/else операторами, но это оказывается довольно медленным. Использование R функций, таких как apply, unique, etc., похоже, работает даже медленнее! Я даже пытался кодировать эти символы с помощью целых чисел, но не заметил улучшения.

Просто интересно, может ли кто-нибудь придумать более быстрый способ сделать это ...

Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2020

Предполагая, что они на самом деле являются списками, вы можете сделать что-то вроде

library(data.table)
Df <- data.table(list1, list2) 
Df[, .(str = factor(paste0(list1, list2)), 
       row = seq(.N))][, .(str, 
                          paste0(row, collapse = ',')), #collapse ID
                         by = str] 

Для каждой пары списков, а затем объединить результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...