Frage

EDIT:. Dieser Fehler wird in 32-Bit-Versionen von R gefunden wurde in R-Version 2.9.2 wurde behoben


Dies wurde durch @leoniedu mich heute getwittert und ich habe keine Antwort für ihn so dass ich dachte, dass ich es hier posten würde.

habe ich die Dokumentation für agrep lesen () (Fuzzy-String-Matching) und es scheint, dass ich nicht verstehe voll und ganz die max.distance Parameter. Hier ein Beispiel:

pattern <- "Staatssekretar im Bundeskanzleramt"
x <- "Bundeskanzleramt"
agrep(pattern,x,max.distance=18) 
agrep(pattern,x,max.distance=19)

Dass verhält sich genau wie ich erwarten würde. Es gibt 18 Zeichen unterschiedlich zwischen den Saiten so ich erwarten würde, dass die Schwelle eines Spiels zu sein. Hier ist, was ich ist verwirrend:

agrep(pattern,x,max.distance=30) 
agrep(pattern,x,max.distance=31)
agrep(pattern,x,max.distance=32) 
agrep(pattern,x,max.distance=33)

Warum sind 30 und 33 Spiele, aber nicht 31 und 32? Sie einige Zählen zu speichern,

> nchar("Staatssekretar im Bundeskanzleramt")
[1] 34
> nchar("Bundeskanzleramt")
[1] 16
War es hilfreich?

Lösung

ich gepostet auf der R-Liste eine Weile zurück und als Bug in R-Fehler-Liste berichtet. Ich hatte keine brauchbaren Antworten, so dass ich, wenn der Fehler zu sehen twitted war reproduzierbar oder ich war nur etwas fehlt. JD Lange konnte es reproduzieren und freundlich die Frage hier gepostet.

Beachten Sie, dass, zumindest in R, dann agrep eine falsche Bezeichnung ist, da es tut nicht paßt reguläre Ausdrücke, während grep für „Globally Suche nach dem regulären Ausdruck und Druck“ steht. Es soll kein Problem mit Mustern hat länger als der Zielvektor. (Glaube ich!)

In meinem Linux-Server, alles ist gut, aber nicht so in meinem Mac und Windows-Rechnern.

Mac: Session () R Version 2.9.1 (2009-06-26) i386-apple-darwin8.11.1 locale: en_US.UTF-8 / en_US.UTF-8 / C / C / en_US.UTF-8 / en_US.UTF-8

agrep (Muster, x, max.distance = 30) [1] 1

  

agrep (Muster, x, max.distance = 31)   Ganzzahl (0)   agrep (Muster, x, max.distance = 32)   Ganzzahl (0)   agrep (Muster, x, max.distance = 33)   [1] 1

Linux: R Version 2.9.1 (2009-06-26) x86_64-unknown-linux-gnu

locale: LC_CTYPE = en_US.UTF-8; LC_NUMERIC = C; LC_TIME = en_US.UTF-8; LC_COLLATE = en_US.UTF-8; LC_MONETARY = C; LC_MESSAGES = en_US.UTF-8; LC_PAPER = en_US.UTF-8; LC_NAME = C; LC_ADDRESS = C; LC_TELEPHONE = C; LC_MEASUREMENT = en_US.UTF-8; LC_IDENTIFICATION = C

  

agrep (Muster, x, max.distance = 30)   [1] 1   agrep (Muster, x, max.distance = 31)   [1] 1   agrep (Muster, x, max.distance = 32)   [1] 1   agrep (Muster, x, max.distance = 33)   [1] 1

Andere Tipps

Ich bin nicht sicher, ob Ihr Beispiel macht Sinn. Für die Grund grep () Muster ist oft ein einfaches oder ein regulärer Ausdruck, und x ist ein Vektor-Element, dessen erhalten, um Muster abgestimmt. Mit Mustern als längere Zeichenfolge, dass x mich seltsam trifft.

Dieses betrachten, wo wir nutzen grep nur statt substr:

R> grep("vo", c("foo","bar","baz"))   # vo is not in the vector
integer(0)
R> agrep("vo", c("foo","bar","baz"), value=TRUE) # but is close enough to foo
[1] "foo"
R> agrep("vo", c("foo","bar","baz"), value=TRUE, max.dist=0.25) # still foo
[1] "foo"
R> agrep("vo", c("foo","bar","baz"), value=TRUE, max.dist=0.75) # now all match
[1] "foo" "bar" "baz"
R>  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top