2012-04-09 10 views
7

Escape-Zeichen verursachen eine Menge Ärger in R, wie durch frühere Anfragen belegt:Entfernen Sie Escapes von einer Zeichenfolge oder "Wie kann ich aus dem Weg kommen?"

  1. Change the values in a column
  2. Can R paste() output "\"?
  3. Replacing escaped double quotes by double quotes in R
  4. How to gsub('%', '\%', ... in R?

Viele dieser früheren Fragen sein könnte vereinfacht zu Sonderfällen von "Wie kann ich aus dem Weg gehen?"

Gibt es eine einfache Möglichkeit, dies zu tun?

Zum Beispiel kann ich keine Argumente zu gsub finden, die alle Fluchten aus dem folgenden entfernen werden:

test <- c('\01', '\\001') 
+0

'\ 0 'ist die nul String. R hat die in Strings für einige Versionen nicht erlaubt. Welche Version von R verwendest du? –

+0

@Josh: 2.14. Gibt es keine Möglichkeit, "0" aus "\ 0" zu extrahieren? –

+0

Nur um klar zu sein: Sie möchten alle Instanzen von "\?" wo "wörtlich genommen" und "?" bedeutet irgendein einzelnes Zeichen? Oder möchten Sie nur alle Instanzen von "\" entfernen, außer wenn es "\\" ist? Ich würde immer noch mit der Regex-Konstruktion '[\\] {1,}' gehen. Edit: huck, selbst der Parser für Edits hier vermasselt Escapes :-( –

Antwort

8

Die Schwierigkeit dabei ist, dass "\1", obwohl es mit zwei Glyphen gedruckt ist, ist tatsächlich, in R Sicht ein einzelnes Zeichen. Und in der Tat ist es das gleiche Charakter wie "\001" und "\01":

nchar("\1") 
# [1] 1 
nchar("\001") 
# [1] 1 
identical("\1", "\001") 
# [1] TRUE 

Also, Sie können im Allgemeinen entfernen alle Schrägstriche mit etwas wie folgt aus:

(test <- c("\\hi\\", "\n", "\t", "\\1", "\1", "\01", "\001")) 
# [1] "\\hi\\" "\n"  "\t"  "\\1" "\001" "\001" "\001" 
eval(parse(text=gsub("\\", "", deparse(test), fixed=TRUE))) 
# [1] "hi" "n" "t" "1" "001" "001" "001" 

Aber, wie Sie sehen können , "\1", "\01" und \001" werden alle als 001 gerendert (da bis R sind alle nur unterschiedliche Namen für "\001").


EDIT: Weitere Informationen über die Verwendung von "\" in Escape-Sequenzen, und auf die große Vielfalt von Charakteren, die sie dargestellt werden kann (einschließlich der nicht anerkannten nul Zeichenfolge von Joshua Ulrich in einem Kommentar oben erwähnt) , siehe this section der R-Sprachdefinition.

1

Ich habe gerade das gleiche Problem konfrontiert - wenn Sie Any \ x, wo x ein Zeichen ist, dann bin ich mir nicht sicher, wie, ich wünschte, ich wüsste, aber es für eine bestimmte Escape-Sequenz zu beheben ,. \ N sagen, dann können Sie

new = gsub("\n","",old,fixed=T) 

in meinem Fall tun, hatte ich nur \ n

Verwandte Themen