【问题标题】:Calculate edit distance percentage计算编辑距离百分比
【发布时间】:2016-12-19 18:53:05
【问题描述】:

我正在尝试从一组序列中获取一定百分比的编辑距离。到目前为止,这就是我所拥有的:

library(stringdist)

sequence <- c("CA--------W----------------------EKDRRTEAF---F------",
   "CA--------W----------------------EKDRRTEAF---F------", 
   "CA--------S-------------------SLVFGQGDNIQY---F------", 
   "RA--------S-------------------SLIYSP----LH---F------")

edit_dist <- stringdistmatrix(sequence)
#0 
#13 13 
#14 14 11

len <- stri_length(gsub('-', '', sequence))
#13    13    16    12

由于len 的每一行相当于sequence 的每一行,所以在比较两行时,我想使用最大的len 来获得百分比。因此,当第二个和第三个序列之间有一个编辑距离时,它将使用 16 而不是 13 的长度来获得百分比。

我知道这段代码是错误的,但这通常是我想要的想法:

for (i in len) {
  num1 <- len[i]
  for (j in len){
    num2 <- len[j] 
    if (num2 > num1){
        num <- num2
        }else{
          num <- num1
        }
    }
    edit_dist/num
}

答案应该类似于以下内容:

0 .8125 .8125 1.0769 1.0769 .6875

【问题讨论】:

    标签: r bioinformatics string-comparison edit-distance


    【解决方案1】:

    您可以使用outerpmax 构造一个合适的最大长度矩阵,然后您可以将其强制为dist 类(如edit_dist),这样您就可以划分:

    edit_dist <- stringdistmatrix(sequence)
    n <- nchar(gsub('-', '', sequence))
    
    edit_dist / as.dist(outer(n, n, pmax))
    ##          1        2        3
    ## 2 0.000000                  
    ## 3 0.812500 0.812500         
    ## 4 1.076923 1.076923 0.687500
    

    【讨论】: