Ersatz einzelner backslash in R
Habe ich gelesen, einige Fragen und Antworten zu diesem Thema in stack-überlauf, aber noch nicht wissen, wie dieses problem zu lösen:
Mein Ziel ist es, verwandeln die Datei-Verzeichnis-strings in windows explorer, um die form, die erkennbar in R, z.B. C:\Users\Public muss umgewandelt werden C:/Users/Public im Grunde sind die einzelnen back-slash sollte ersetzt werden durch den Schrägstrich. Aber R konnte nicht zum speichern der original-string "C:\Users\Public" weil die \U und \P sind als escape-Zeichen.
dirTransformer <- function(str){
str.trns <- gsub("\\", "/", str)
return(str.trns)
}
str <- "C:\Users\Public"
dirTransformer(str)
> Error: '\U' used without hex digits in character string starting ""C:\U"
Was ich eigentlich schreiben ist eine GUI, wo der end-Effekt ist es, der Benutzer tippt oder fügt das Verzeichnis in ein Eingabefeld ein, drückt einen Knopf und dann wird das Programm verarbeiten automatisch.
Wäre bitte jemand vorschlagen, wie ich dieses problem lösen?
"C:\\Users\\Public"
- verwenden Sie doppelte backslashes zu bezeichnen Literale umgekehrte Schrägstriche.- Gut, dass bedeutet, ich muss Sie manuell ändern Sie das Verzeichnis. Mein Zweck entwickeln Sie eine Funktion, die Verarbeitung und Transformation das Verzeichnis automatisch, ohne manuelle intervention.
- Sie bereits manuell eingegeben
str <- "C:\Users\Public"
- warum nicht machen es richtig und gebenstr <- "C:\\Users\\Public"
? Auch, nichtgsub("\\", "/", str)
, abergsub("\\", "/", str, fixed=TRUE)
- Das war nur ein Vereinfachtes Beispiel. Was ich eigentlich schreiben ist eine GUI, wo der Benutzer tippt oder fügt das Verzeichnis in ein Eingabefeld ein, drückt einen Knopf und dann wird das Programm verarbeiten. Die fixed = TRUE ist eine Korrektur. Dank
- können Sie versuchen
tools::normalizePath("C:\\Users\\Public","/",TRUE")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie müssen, verwenden Sie einen backslash in die Zeichenfolge in R, die Sie brauchen, um Doppel-backslash. Auch, wenn Sie
gsub("\\", "/", str)
das erste argument wird analysiert, wie eine regex, und es ist nicht gültig, da Sie enthält nur ein einziges literal backslash, der fliehen muss, etwas. In der Tat, Sie brauchen, umgsub
behandeln Sie es wie ein Klartext mitfixed=TRUE
.Jedoch, möchten Sie vielleicht die Verwendung
normalizePath
, siehe diese SO-thread.Ich bin mir nicht sicher, wie Sie Sie beabsichtigen, den Benutzer zur Eingabe des Pfades in der GUI, aber bei der Verwendung von readline() und dann die Eingabe C:\Users\Public unquoted, R liest das als:
Wir wollen dann ersetzen Sie "\\" mit "/", aber aus den "\\" wir brauchen, "\ \ \ \ " in der gsub.
Ich kann nicht sicher sein, wie die Eingabe von dem Benutzer gelesen werden, in der R die in Ihrem GUI, aber R wird wahrscheinlich entkommen \N im string, wie bei der Verwendung der readline-Beispiel. die Zeichenfolge, die Sie versuchen, erstellen "C:\Users\Public" normalerweise nicht passieren.
gsub
wenn OP zu ersetzen braucht einen literalen backslash? Das einzige, was notwendig zu machen, arbeiten mitgsub
zu deaktivieren Analyse das erste argument ist ein regulärer Ausdruck mitfixed=TRUE
.fixed = TRUE
? Es ist wohl ein bisschen sauberer/klarer, aber ich würde nicht sagen, dass es eine sehr große Sache.