两个长度不同的字符串的接近度评分(在R中实现双重求和)

两个长度不同的字符串的接近度评分(在R中实现双重求和),r,double,proximity,R,Double,Proximity,我试图在R中实现下面的等式,但我在这样做时遇到了困难 我目前的方法如下,但我担心这是不正确的,因为完美匹配会得到相同的分数(很抱歉代码冗长、不复杂:我很新): query=“急性髓系白血病” document1=“急性髓系白血病正常核型” document2=“急性髓系白血病” document3=“急性正常核型” Q由于需要多次计算min\u dist和actual\u dist,因此应该将它们作为函数编写。另外,让您的代码尽可能接近算法。类似于以下的方法应该可以工作: min_dist &

我试图在R中实现下面的等式,但我在这样做时遇到了困难

我目前的方法如下,但我担心这是不正确的,因为完美匹配会得到相同的分数(很抱歉代码冗长、不复杂:我很新):

query=“急性髓系白血病”
document1=“急性髓系白血病正常核型”
document2=“急性髓系白血病”
document3=“急性正常核型”

Q由于需要多次计算
min\u dist
actual\u dist
,因此应该将它们作为函数编写。另外,让您的代码尽可能接近算法。类似于以下的方法应该可以工作:

min_dist <- function(d, Q) {
  W <- intersect(d,Q)
  n <- length(W)
  sum(sapply(0:(n-1), function(i) sapply(0:(n-1), function(j) abs(i-j))))
}

current_dist <- function(d, Q) {
  W <- intersect(d,Q)
  pos <- sapply(W, function(x)which(Q==x))
  n <- length(pos)
  sum(sapply(1:n, function(i) sapply(1:n, function(j) abs(pos[i]-pos[j]))))
}

dist_d1_Q <- min_dist(d1, Q) / current_dist(d1, Q)
dist_d2_Q <- min_dist(d2, Q) / current_dist(d2, Q)
dist_d3_Q <- min_dist(d3, Q) / current_dist(d3, Q)

c(dist_d1_Q, dist_d2_Q, dist_d3_Q)
# [1]   1   1 NaN

min_dist由于需要多次计算
min_dist
实际_dist
,因此应将它们作为函数编写。另外,让您的代码尽可能接近算法。类似于以下的方法应该可以工作:

min_dist <- function(d, Q) {
  W <- intersect(d,Q)
  n <- length(W)
  sum(sapply(0:(n-1), function(i) sapply(0:(n-1), function(j) abs(i-j))))
}

current_dist <- function(d, Q) {
  W <- intersect(d,Q)
  pos <- sapply(W, function(x)which(Q==x))
  n <- length(pos)
  sum(sapply(1:n, function(i) sapply(1:n, function(j) abs(pos[i]-pos[j]))))
}

dist_d1_Q <- min_dist(d1, Q) / current_dist(d1, Q)
dist_d2_Q <- min_dist(d2, Q) / current_dist(d2, Q)
dist_d3_Q <- min_dist(d3, Q) / current_dist(d3, Q)

c(dist_d1_Q, dist_d2_Q, dist_d3_Q)
# [1]   1   1 NaN

min\u dist什么是
dat
?。该代码已更新,并将“dat”替换为矩阵中的“y”。为什么您的
y是
dat
?。该代码已更新,并将“dat”替换为矩阵中的“y”。为什么您的
y