У меня есть именованный список, представляющий коллекцию биологических путей, где имена - это имена путей, а векторы в списке - это белки, которые принадлежат этому пути. Небольшой пример:
ann <- structure(list(`GO:0000010` = c("Q33DR2", "Q9CZQ1", "D6RHT8",
"F6ZCX7", "B8JJX0", "Q33DR3", "F6T4Z4", "E0CYM9"), `GO:0000016` = c("Q5XLR9",
"Q3TZ78", "F8VPT3"), `GO:0000026` = c("Q8BTP0", "Q3TZM9", "A0A077K846",
"F6R220", "A0A077K9W9"), `GO:0000032` = c("Q924M7", "Q3V100",
"F6Q3K8", "Q921Z9"), `GO:0000033` = c("Q9DBE8", "F6RBY3", "Q8BMZ4",
"Q8K2A8", "F6XUH0", "D6RCW8", "Q6P8H8", "Q3URN2")), .Names = c("GO:0000010",
"GO:0000016", "GO:0000026", "GO:0000032", "GO:0000033"))
Меня интересуют пары путей:
pairs <- t(combn(names(ann), 2))
Для каждой пары путей я хочу получить все возможные комбинации белков, где белок № 1 находится в пути № 1, а белок № 2 находится в пути № 2. Желаемый результат - список двухколоночных матриц, где столбец № 1 содержит белки в пути № 1, а столбец № 2 содержит белки в пути № 2. Пока у меня есть это:
protein_pairs <- purrr::map2(pairs[, 1], pairs[, 2], ~ as.matrix(expand.grid(ann[[.x]], ann[[.y]])))
Однако, поскольку общее количество пар, которые меня интересуют, достаточно велико (обычно> 1000), отображение expand.grid
по всем возможным парам занимает очень много времени - порядка часов.
Существует ли более быстрый способ получить все возможные комбинации белков в каждой паре биологических путей из этого списка?