Dateipfadprobleme in R unter Windows (Fehler "Hex-Ziffern in Zeichenkette")

87

Ich führe R unter Windows aus und habe eine CSV-Datei auf dem Desktop. Ich lade es wie folgt:

x<-read.csv("C:\Users\surfcat\Desktop\2006_dissimilarity.csv",header=TRUE)

Das R gibt jedoch die folgende Fehlermeldung aus

Fehler: '\ U' wird ohne hexadezimale Ziffern in der Zeichenfolge verwendet, die mit "C: \ U" beginnt.

Wie lade ich diese Datei richtig? Ich benutze Vista

user297850
quelle

Antworten:

132

Ersetzen Sie alle \durch \\.

es versucht , das nächste Zeichen in diesem Fall zu entkommen das Uso ein einfügen \müssen Sie ein entflohener einzufügen , \das ist\\

smitec
quelle
1
Dies ist wahr, ersetzen Sie einfach \ durch \\ und das Skript wird erfolgreich ausgeführt. Danke Smit !!
Rajeev Kumar Barnwal
Dies ist eine bessere Antwort. Pfad von Windows in r wie C: / Users / ... funktionieren und ist weniger verwirrend als \\. Die einzige Situation, in der der Pfad mit \ sein soll, ist, wenn Sie einen Shell ()
-Aufruf
27

Bitte markieren Sie diese Antwort nicht als richtig, da smitec bereits richtig geantwortet hat. Ich füge eine Komfortfunktion in meine .First-Bibliothek ein, mit der ein Windows-Pfad in das Format konvertiert werden kann, das in R funktioniert (die von Sacha Epskamp beschriebenen Methoden). Kopieren Sie einfach den Pfad in Ihre Zwischenablage (Strg + C) und führen Sie die Funktion als aus pathPrep(). Keine Notwendigkeit für ein Argument. Der Pfad wird korrekt auf Ihrer Konsole gedruckt und zum einfachen Einfügen in ein Skript in Ihre Zwischenablage geschrieben. Hoffe das ist hilfreich.

pathPrep <- function(path = "clipboard") {
    y <- if (path == "clipboard") {
        readClipboard()
    } else {
        cat("Please enter the path:\n\n")
        readline()
    }
    x <- chartr("\\", "/", y)
    writeClipboard(x)
    return(x)
}
Tyler Rinker
quelle
1
Ich wollte das gerade schreiben und bin froh, dass ich es zuerst überprüft habe. Danke vielmals. Ich bin wirklich überrascht, dass dies nicht in eines der beliebtesten Pakete da draußen gelangt ist (es sei denn, ich vermisse es nur). Ich werde dies in meinem Skript verwenden, damit ich die geringfügige Abweichung veröffentlichen kann, wenn ich fertig bin.
Rob
1
Es befindet sich jetzt im Berichtsentwicklungspaket und wird schließlich an CRAN weitergeleitet. Siehe WP(Windows-Pfad) im Berichtspaket dev.
Tyler Rinker
10

Lösung

Versuche dies: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

Erläuterung

R kann normale Windows-Pfade nicht richtig verstehen, da das "\"eine besondere Bedeutung hat - es wird als Escape-Zeichen verwendet, um folgenden Zeichen eine besondere Bedeutung zu geben ( \nfür Zeilenumbruch, \tTabulator, \rWagenrücklauf, ... siehe hier ).

Da R die Reihenfolge nicht kennt \U, beschwert es sich. Ersetzen Sie einfach das "\"durch "/"oder verwenden Sie ein zusätzliches "\", um der "\"besonderen Bedeutung zu entkommen, und alles funktioniert reibungslos.

Alternative

Unter Windows ist es meiner Meinung nach am besten, z. B. AutoHotkey zu verwenden, um benutzerdefinierte Hotkeys zu verwenden, um Ihren Workflow mit Windows-spezifischen Pfaden in R zu verbessern:

  • Definieren Sie einen Hotkey, z. B. Cntr- Shift-V
  • Weist ihm eine Prozedur zu, die Backslashes in Ihrer Zwischenablage durch Slaches ersetzt ...
  • Wann immer Sie kopieren möchten, fügen Sie einen Pfad in R ein. Sie können Cntr- Shift- Vanstelle von Cntr- verwenden.V
  • Et-voila

AutoHotkey Code Snippet (Link zur Homepage)

^+v::
StringReplace, clipboard, clipboard, \, /, All 
SendInput, %clipboard% 
Petermeissner
quelle
5

Meine Lösung besteht darin, ein RStudio-Snippet wie folgt zu definieren :

snippet pp
    "`r gsub("\\\\", "\\\\\\\\\\\\\\\\", readClipboard())`"

Dieses Snippet wandelt Backslashes \in doppelte Backslashes um \\. Die folgende Version funktioniert, wenn Sie Backslahes in Schrägstriche umwandeln möchten /.

snippet pp
    "`r gsub("\\\\", "/", readClipboard())`"

Sobald Ihr bevorzugtes Snippet definiert ist, fügen Sie einen Pfad aus der Zwischenablage ein, indem Sie p- p- TAB- eingeben ENTER(dh pp und dann die Tabulatortaste und dann die Eingabetaste). Der Pfad wird dann magisch mit R-freundlichen Trennzeichen eingefügt.

Josh Gilfillan
quelle
Ich wusste nicht, dass Snippets in R Studio existieren, bis ich das sah. Das ist fantastisch.
David
3

Ersetzen Sie die hinteren Schrägstriche durch vordere Schrägstriche, wenn Sie die Windows-Maschine ausführen

Matthew J Watts
quelle
2

Das Ersetzen von Backslash durch Forward Slash funktionierte unter Windows für mich.

Ehteshaam
quelle
1

Der beste Weg, um mit dieser txt-Datei umzugehen, die Daten für das Text-Mining (Sprache, Newsletter usw.) enthält, besteht darin, "\" durch "/" zu ersetzen.

Beispiel:

file<-Corpus(DirSource("C:/Users/PRATEEK/Desktop/training tool/Text Analytics/text_file_main"))
PRATEEK KUMAR
quelle
1

Ich weiß, dass dies wirklich alt ist, aber wenn Sie trotzdem kopieren und einfügen, können Sie einfach Folgendes verwenden:

read.csv(readClipboard())

readClipboard () entgeht für Sie den Schrägstrichen. Denken Sie daran, sicherzustellen, dass die ".csv" in Ihrer Kopie enthalten ist, möglicherweise mit folgendem:

read.csv(paste0(readClipboard(),'.csv'))

Und wenn Sie Ihre Eingabe wirklich minimieren möchten, können Sie einige Funktionen verwenden:

setWD <- function(){
  setwd(readClipboard())
}


readCSV <- function(){
  return(readr::read_csv(paste0(readClipboard(),'.csv')))
} 

#copy directory path
setWD()

#copy file name
df <- readCSV()
Kevin Mc
quelle
0

Ich denke, dass R das '\' in der Zeichenfolge als Escape-Zeichen liest. Beispiel: \ n erstellt eine neue Zeile innerhalb einer Zeichenfolge. \ T erstellt eine neue Registerkarte innerhalb der Zeichenfolge.

'\' funktioniert, weil R dies als normalen Backslash erkennt.

Mileslilly2
quelle
0

readClipboard()funktioniert auch direkt. Kopieren Sie den Pfad in Ihre Zwischenablage

C:\Users\surfcat\Desktop\2006_dissimilarity.csv

Dann

readClipboard()

erscheint als

[1] "C:\\Users\\surfcat\\Desktop\\2006_dissimilarity.csv"
Renay Singh
quelle
-3

Eine einfache Möglichkeit ist die Verwendung von Python. im Python-Terminal-Typ

r "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" und Sie erhalten "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" zurück.

user3827333
quelle