2016-09-10 15 views
1

私はこれらの関数の引数を理解するためにいくつかの助けが必要です。私は助けからその例を取っ​​た。adistとagrep関数のcost引数を設定するにはどうすればよいですか?

## 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;置換のためのsub。このことから

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

は1人のビザは、文字列2を争うの文字列を比較しながら、それはSMMMSMIを見つけることが容易にわかります。 2置換および1挿入、合計で距離は3でなければならない。

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によると、次のとおりです。

一般レーベンシュタイン(編集)距離、挿入の 最小限の可能性加重数を与えます1つの文字列を別の文字列に変換する必要があります。私たちはゼロであることをinsertionsdeletionsコストパラメータを指定した場合

この声明によると、それはsubstitution操作を使用することはありません、そこcostパラメータによって重み付けされた操作の数を最小限にするためにボンネットの下に最適化すること、そうすべきです以前の2つの操作は明らかにコストがかからず、実際には6つの挿入と5つの削除を使用して変換を完了します。これらの操作のコストはゼロであるため距離がゼロになります。

関連する問題