2016-12-19 8 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 

으로 두 줄을 비교할 때, 나는 비율을 얻을 수있는 가장 큰 len를 사용하고 싶습니다. 따라서 두 번째 시퀀스와 세 번째 시퀀스 사이에 편집 거리가 있으면 13을 얻기보다는 16을 사용하여 비율을 얻습니다.

이 코드가 잘못 알고 있지만, 일반적으로 내가가는 오전 생각이다 :

 
0 
.8125 .8125 
1.0769 1.0769 .6875 

답변

4

당신은을 구성 할 수 있습니다 아래의 유사 보일 것이다

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 
} 

대답 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