Problemi di percorso file in R utilizzando Windows (errore "Cifre esadecimali nella stringa di caratteri")


89

Eseguo R su Windows e ho un file csv sul desktop. Lo carico come segue,

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

ma la R dà il seguente messaggio di errore

Errore: "\ U" utilizzato senza cifre esadecimali nella stringa di caratteri che inizia con "C: \ U"

Allora qual è il modo corretto per caricare questo file. Sto usando Vista

Risposte:


134

sostituire tutto \con \\.

sta cercando di sfuggire al carattere successivo in questo caso Uquindi per inserire un \è necessario inserire un carattere di escape \che è\\


1
Questo è vero semplicemente sostituisci \ con \\ e lo script viene eseguito correttamente. Grazie Smit !!
Rajeev Kumar Barnwal

Questa è una risposta migliore. Il percorso da Windows in r come C: / Users / ... funziona ed è meno confuso di \\. L'unica situazione in cui vuoi che il percorso sia con \ è quando
esegui

27

Si prega di non contrassegnare questa risposta come corretta poiché smitec ha già risposto correttamente. Includo una comoda funzione che tengo nella mia libreria .First che fa convertire un percorso di Windows nel formato che funziona in R (i metodi descritti da Sacha Epskamp). Copia semplicemente il percorso negli appunti (ctrl + c) e quindi esegui la funzione come pathPrep(). Non c'è bisogno di discutere. Il percorso viene stampato correttamente sulla tua console e scritto negli appunti per essere facilmente incollato in uno script. Spero che questo sia utile.

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)
}

1
Stavo per scrivere questo e sono contento di aver controllato prima. Grazie mille. Sono davvero sorpreso che questo non sia trapelato in uno dei pacchetti più popolari là fuori (a meno che non me lo manchi). Lo userò nel mio script, quindi posterò la leggera variazione quando avrò finito.
Rob il

1
È ora nel pacchetto di sviluppo dei rapporti e alla fine verrà inviato a CRAN. Vedi WP(percorso windows) nel pacchetto di sviluppo dei rapporti.
Tyler Rinker

11

Soluzione

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

Spiegazione

R non è in grado di capire correttamente i normali percorsi di Windows perché "\"ha un significato speciale - è usato come carattere di escape per dare un significato speciale ai seguenti caratteri ( \nper la nuova riga, \tper la tabulazione, \rper il ritorno a capo, ..., dai un'occhiata qui ).

Perché R non conosce la sequenza di cui \Usi lamenta. Basta sostituire il "\"con "/"o usarne uno aggiuntivo "\"per sfuggire al "\"suo significato speciale e tutto funziona senza intoppi.

Alternativa

Su Windows, penso che la cosa migliore da fare per migliorare il tuo flusso di lavoro con percorsi specifici di Windows in R sia usare ad esempio AutoHotkey che consente tasti di scelta rapida personalizzati:

  • definire un tasto di scelta rapida, ad esempio Cntr- Shift-V
  • gli assegna una procedura che sostituisce i backslash negli Appunti con slaches ...
  • ogni volta che vuoi copiare e incollare un percorso in R puoi usare Cntr- Shift- Vinvece di Cntr-V
  • Et voilà

Snippet di codice AutoHotkey (collegamento alla home page)

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

5

La mia soluzione è definire uno snippet RStudio come segue:

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

Questo frammento converte i backslash \in doppi backslash \\. La seguente versione funzionerà se si preferisce convertire i backslahes in barre in avanti /.

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

Una volta definito il tuo frammento preferito, incolla un percorso dagli appunti digitando p- p- TAB- ENTER(cioè pp e poi il tasto tab e poi invio) e il percorso verrà magicamente inserito con delimitatori amichevoli R.


Non sapevo che gli snippet esistessero in R Studio fino a quando non l'ho visto. Questo e spettacolare.
David,

3

Sostituisci le barre rovesciate \ con le barre in avanti / durante l'esecuzione di Windows Machine


2

La sostituzione della barra rovesciata con la barra in avanti ha funzionato per me su Windows.


1

Il modo migliore per risolvere questo problema nel caso di file txt che contiene dati per il text mining (parlato, newsletter, ecc.) È sostituire "\" con "/".

Esempio:

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

1

So che è molto vecchio, ma se stai comunque copiando e incollando, puoi semplicemente usare:

read.csv(readClipboard())

readClipboard () evita le barre rovesciate per te. Ricorda solo di assicurarti che ".csv" sia incluso nella tua copia, magari con questo:

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

E se vuoi davvero ridurre al minimo la tua digitazione puoi usare alcune funzioni:

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


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

#copy directory path
setWD()

#copy file name
df <- readCSV()

0

Penso che R stia leggendo la "\" nella stringa come un carattere di escape. Ad esempio \ n crea una nuova riga all'interno di una stringa, \ t crea una nuova tabulazione all'interno della stringa.

'\' funzionerà perché R lo riconoscerà come una normale barra rovesciata.


0

readClipboard()funziona anche direttamente. Copia il percorso negli appunti

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

Poi

readClipboard()

appare come

[1] "C:\\Users\\surfcat\\Desktop\\2006_dissimilarity.csv"

-3

Un modo semplice è usare python. nel tipo di terminale python

r "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" e ti verrà restituito "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.