Problemas de ruta de archivo en R con Windows (error "Dígitos hexadecimales en la cadena de caracteres")

89

Ejecuto R en Windows y tengo un archivo csv en el escritorio. Lo cargo de la siguiente manera,

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

pero la R da el siguiente mensaje de error

Error: '\ U' usado sin dígitos hexadecimales en la cadena de caracteres que comienza con "C: \ U"

Entonces, ¿cuál es la forma correcta de cargar este archivo? Estoy usando vista

user297850
fuente

Respuestas:

134

reemplace todos los \con \\.

está tratando de escapar del siguiente carácter en este caso, Uasí que para insertar un \, debe insertar un escape \que es\\

smitec
fuente
1
Esto es cierto, simplemente reemplace \ con \\ y el script se ejecutará correctamente. Gracias Smit !!
Rajeev Kumar Barnwal
Esta es una mejor respuesta. La ruta de Windows en r como C: / Users / ... funciona y es menos confusa que \\. La única situación en la que querrás que la ruta esté con \ es cuando haces una llamada de shell () como shell ("cd C: \\ Users \\ && hacer algo")
Monduiz
27

No marque esta respuesta como correcta, ya que smitec ya ha respondido correctamente. Incluyo una función de conveniencia que guardo en mi biblioteca .First que convierte una ruta de Windows al formato que funciona en R (los métodos descritos por Sacha Epskamp). Simplemente copie la ruta a su portapapeles (ctrl + c) y luego ejecute la función como pathPrep(). No hay necesidad de discutir. La ruta se imprime en su consola correctamente y se escribe en su portapapeles para pegarla fácilmente en un script. Espero que esto sea útil.

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
fuente
1
Estaba a punto de escribir esto y me alegro de haberlo comprobado primero. Gracias una tonelada. Estoy realmente sorprendido de que esto no se haya filtrado en uno de los paquetes más populares que existen (a menos que me lo pierda). Voy a usar esto en mi guión, así que publicaré la ligera variación cuando termine.
Rob
1
Ahora está en el paquete de desarrollo de informes y eventualmente se enviará a CRAN. Consulte WP(ruta de Windows) en el paquete de desarrollo de informes.
Tyler Rinker
11

Solución

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

Explicación

R no puede comprender correctamente las rutas normales de Windows porque "\"tiene un significado especial: se usa como carácter de escape para dar un significado especial a los siguientes caracteres ( \npara nueva línea, \tpara tabulación, \rpara retorno de carro, ..., eche un vistazo aquí ).

Como R no conoce la secuencia, \Use queja. Simplemente reemplace el "\"con "/"o use un adicional "\"para escapar "\"de su significado especial y todo funcionará sin problemas.

Alternativa

En Windows, creo que lo mejor que puede hacer para mejorar su flujo de trabajo con rutas específicas de Windows en R es usar, por ejemplo, AutoHotkey, que permite teclas de acceso rápido personalizadas:

  • definir una tecla de acceso rápido, por ejemplo Cntr- Shift-V
  • le asigna un procedimiento que reemplaza las barras invertidas dentro de su Portapapeles con slaches ...
  • cuando quiera copiar y pegar una ruta en R, puede usar Cntr- Shift- en Vlugar de Cntr-V
  • Et-voila

Fragmento de código de AutoHotkey (enlace a la página de inicio)

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

Mi solución es definir un fragmento de RStudio de la siguiente manera:

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

Este fragmento convierte las barras invertidas \en barras invertidas dobles \\. La siguiente versión funcionará si prefiere convertir barras invertidas en barras inclinadas hacia adelante /.

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

Una vez que haya definido su fragmento preferido, pegue una ruta del portapapeles escribiendo p- p- TAB- ENTER(es decir, pp y luego la tecla de tabulación y luego ingrese) y la ruta se insertará mágicamente con delimitadores compatibles con R.

Josh Gilfillan
fuente
No sabía que existían fragmentos en R Studio hasta que vi esto. Esto es asombroso.
David
3

Reemplazar barras inclinadas \ con barras inclinadas hacia adelante / al ejecutar la máquina con Windows

Matthew J. Watts
fuente
2

Reemplazar la barra invertida con barra diagonal me funcionó en Windows.

Ehteshaam
fuente
1

La mejor manera de lidiar con esto en el caso de un archivo txt que contiene datos para la minería de texto (voz, boletín informativo, etc.) es reemplazar "\" con "/".

Ejemplo:

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

Sé que esto es muy antiguo, pero si está copiando y pegando de todos modos, puede usar:

read.csv(readClipboard())

readClipboard () escapa de las barras invertidas por usted. Solo recuerde asegurarse de que el ".csv" esté incluido en su copia, tal vez con esto:

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

Y si realmente desea minimizar su escritura, puede usar algunas funciones:

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


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

#copy directory path
setWD()

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

Creo que R está leyendo '\' en la cadena como un carácter de escape. Por ejemplo, \ n crea una nueva línea dentro de una cadena, \ t crea una nueva pestaña dentro de la cadena.

'\' funcionará porque R reconocerá esto como una barra invertida normal.

mileslilly2
fuente
0

readClipboard()también funciona directamente. Copia la ruta en tu portapapeles

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

Entonces

readClipboard()

aparece como

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

Una forma sencilla es utilizar Python. en el tipo de terminal de Python

r "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" y obtendrás 'C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv'

usuario3827333
fuente