-2

我有大量的 DNA 序列 {A,C,T,G}(总共 100,000 个列表,每个列表有 3000 个字符)。我需要成对分析这些列表,从第一个列表开始,然后将其与第二个、第三个、第四个、...、第 100,000 个进行比较。然后移动到第 2 个列表并将其与第 3 个、第 4 个、...、第 100,000 个等进行比较。

在每个成对比较中,我需要找到元素的唯一组合的索引。例如:

列表 1 =“A”、“C”、“A”、“G”、“T”、“A”、“C”、“T”、“C”。

列表 2 =“A”、“G”、“G”、“G”、“C”、“A”、“G”、“G”、“C”。

我想要的输出是:

AA = {1, 6}

CG = {2, 7}

AG = {3}

GG = {4}

TC = {5}

TG = {8}

抄送 = {9}

我曾尝试使用循环和语句对此进行编码Rcppforif/else结果非常慢。使用R诸如apply, unique, etc.似乎执行更慢的功能!我什至尝试使用整数对这些字符进行编码,但没有注意到改进。

只是想知道是否有人能想到一个更快的方法来做到这一点......

谢谢!

4

1 回答 1

0

假设它们实际上是列表,您可以执行类似的操作

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] 

对于每个列表对,然后组合结果。

于 2020-02-11T07:50:00.890 回答