计算编辑距离百分比
Calculate edit distance percentage
我正在尝试从一组序列中获取编辑距离的百分比。到目前为止,这就是我所拥有的:
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
您可以使用 outer
和 pmax
构造一个合适的最大长度矩阵,然后您可以将其强制转换为 dist
class(如 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
我正在尝试从一组序列中获取编辑距离的百分比。到目前为止,这就是我所拥有的:
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
您可以使用 outer
和 pmax
构造一个合适的最大长度矩阵,然后您可以将其强制转换为 dist
class(如 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