Schwierigkeiten mit 'agrep (..., fixed = F)'

8

In ?agrep ( grep mit Fuzzy-Matching) wird erwähnt, dass ich das Argument fixed=FALSE setzen kann, um mein Muster als regulären Ausdruck interpretieren zu lassen.

Aber ich kann es nicht zum Laufen bringen!

%Vor%

Der obige sollte mit dem regulären Ausdruck übereinstimmen "(asdf | fdsa)" genau stimmt in diesem Fall mit der Testzeichenfolge "asdf" überein.

Zur Bestätigung:

%Vor%

Und noch verwirrender ist, dass adist den Abstand zwischen dem Muster und der Zeichenfolge korrekt als 0 angibt, was bedeutet, dass agrep definitiv 1 anstatt integer(0) zurückgeben sollte (es gibt keine Möglichkeit, dass 0 ist größer als der Standardwert max.dist = 0.1 ).

%Vor%

Warum funktioniert das nicht? Gibt es etwas, das ich nicht verstehe? Eine Problemumgehung? Ich bin froh, adist verwenden zu können, bin mir aber nicht ganz sicher, wie man den agrep -Parameter von max.distance=0.1 in den entsprechenden Parameter von adist umwandelt.

(Ja, ich bin auf einem alten Computer festgefahren, der nicht besser ist als R 2.15.2)

%Vor%     
mathematical.coffee 08.04.2013, 05:11
quelle

1 Antwort

6

tl; dr: agrep(..., fixed=F) scheint nicht mit dem '|' Charakter. Verwende aregexec .

Bei weiteren Untersuchungen denke ich, dass dies ein Fehler ist und dass agrep(..., fixed=F) nicht mit '|' Regexes (obwohl adist(..., fixed=F) tut).

Um dies näher auszuführen, beachte das

%Vor%

Wenn 'asdf' agrep 'd zu nicht-regulärem Ausdruck String' (asdf | fdsa) 'wäre, dann hätte es den Abstand 7.

In diesem Sinne:

%Vor%

Das sind die Ergebnisse, die ich erwarten würde, wenn fixed=T . Wenn fixed=F , meine Regex würde 'asdf' genau und die Entfernung wäre 0, so würde ich immer ein Ergebnis von '1' wieder von agrep bekommen.

Es sieht also so aus, dass agrep(pattern, x, fixed=F) nicht funktioniert , d. h. es berücksichtigt fixed als TRUE für diese Art von Mustern.

Wie @Arun erwähnt, könnte es nur '|' Regexes, die nicht funktionieren. Beispiel: agrep('la[sb]y', 'lazy', fixed=FALSE) funktioniert wie erwartet.

BEARBEITEN: Abhilfe (danke @Arun)

Die Funktion aregexec scheint zu funktionieren.

%Vor%     
mathematical.coffee 08.04.2013, 05:47
quelle

Tags und Links