2016-01-07 4 views
1

J'ai quelques problèmes pour comprendre le résultat de la fonction agrep(). Je ne comprends pas ce que j'ai manqué dans la description de la fonction. agrep() est pour appariement flou et je voudrais l'utiliser pour corriger une faute d'orthographe. Je ne souhaite autoriser qu'un maximum de 2 insertions/suppressions/substitutions.R comportement de la fonction agrep()

Voici mon code juste pour un exemple:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY") 
agrep("73SAINTGERVAIS",check,ignore.case=TRUE,max.distance=2,value=TRUE) 

Voici ce que je pense est de ne pas avoir réponse à cette demande parce que je ne peux pas transformer "73SAINTGERVAIS" en "73SAINTGERMAINLACHAMBOTTE" ou "73CHAMBERY" avec un maximum de 2 insertions/délétions/substitutions. Cependant, le résultat est:

[1] "73SAINTGERMAINLACHAMBOTTE" 

Est-ce que cela signifie que la notion d'insertions/suppressions/substitutions ne sont pas basées sur des caractères (je veux dire la chaîne "MAINLACHALBOTTE" est considéré comme 1 insertion)?

+0

ok merci, je n'a pas compris la notion de «dedans», c'est clair maintenant. – Vivien

Répondre

2

En effet, il effectue également une correspondance partielle. Par exemple, '73SAINTGERVAIS' est à deux distances de la sous-chaîne '73SAINTGERMAIN'.

Vous pouvez essayer adist plutôt comme ceci:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN") 
adist("73SAINTGERVAIS",check) <= 2 
     [,1] [,2] [,3] 
[1,] FALSE FALSE TRUE 

Si vous voulez que le vecteur de chaînes d'entrée appariés en sortie, vous pouvez continuer à effectuer les opérations suivantes:

check[as.logical(adist("73SAINTGERVAIS",check) <= 2)] 
+0

Parfait! Merci! – Vivien