2016-12-19 10 views
2

シーケンスのグループから編集距離のパーセンテージを取得しようとしています。今のところ、これは私が持っているものです:lenの各行がsequenceの各ラインに相当し編集距離の計算パーセント

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 

ように、2つの行を比較するとき、私はパーセンテージを得るために最大のlenを使用したいと思います。したがって、2番目と3番目のシーケンスの間に編集距離がある場合は、パーセンテージを得るために13ではなく16の長さを使用します。

私はこのコードが間違っている知っているが、それは一般的に私はつもりだアイデアです:

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 

答えて

4

あなたが構築することができます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