2016-09-10 77 views
1

我需要一些幫助來理解這些函數的參數。我從幫助中拿出了榜樣。如何在adist和agrep函數中設置成本參數?

## To see the transformation counts for the Levenshtein distance: 
drop(attr(adist("kitten", "sitting", counts = TRUE), "counts")) 
# ins del sub 
# 1 0 2 

ins,表示插入; del刪除;並替換替代品。

## To see the transformation sequences: 
attr(adist(c("kitten", "sitting"), counts = TRUE), "trafos") 
#  [,1]  [,2]  
# [1,] "MMMMMM" "SMMMSMI" 
# [2,] "SMMMSMD" "MMMMMMM" 

從這不難看出,雖然比較字符串一個簽證爭奪的線二,發現SMMMSMI; 2個替換和1個插入,總共應該有三個距離。

adist("kitten", "sitting", costs = list(ins=1, del=0, sub=1), partial = F) 
#  [,1] 
# [1,] 3 

這就是我不明白的原因,爲什麼當我設置插入成本等於零時,結果在總距離爲零。由於替換的次數,我預計爲2。

adist("kitten", "sitting", costs = list(ins=0, del=0, sub=1), partial = F) 
#  [,1] 
# [1,] 0 

非常感謝。

回答

1

這是更加容易,同時指定費用爲每個操作爲你做了解釋,如果你看看實際計數:

drop(attr(adist("kitten", "sitting", costs = list(ins=0, del=0, sub=1), 
       partial = F, counts = T), "counts")) 

# ins del sub 
# 6 5 0 

所以你看到的不是:

# ins del sub 
# 1 0 2 

當您從默認值中指定一組不同的成本參數時,插入,刪除和替換操作的數量發生了變化。這是有意義的,因爲有一個串變換到另一個一種以上的方式,並從adist的距離,根據?adist

廣義的Levenshtein(編輯)的距離,使插入的 最小可能加權數,刪除和 替換需要將一個字符串轉換成另一個。

根據這項聲明,應該有發動機罩下的最優化,以儘量減少由cost參數加權操作的數量,所以如果我們指定insertionsdeletions成本參數爲零,那麼它不會使用substitution操作因爲前兩個操作顯然成本較低,並且實際上它使用6個插入和5個刪除來完成以零距離結束的轉換,因爲這兩個操作的成本爲零。

相關問題