Problèmes de chemin de fichier dans R sous Windows (erreur "Chiffres hexadécimaux dans la chaîne de caractères")

89

J'exécute R sur Windows et j'ai un fichier csv sur le bureau. Je le charge comme suit,

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

mais le R donne le message d'erreur suivant

Erreur: '\ U' utilisé sans chiffres hexadécimaux dans la chaîne de caractères commençant par "C: \ U"

Alors, quelle est la bonne façon de charger ce fichier. J'utilise Vista

user297850
la source

Réponses:

134

remplacez tous les \par \\.

il essaie d'échapper au caractère suivant dans ce cas, Udonc pour insérer un, \vous devez insérer un échappé \qui est\\

smitec
la source
1
Ceci est vrai, remplacez simplement \ par \\ et le script s'exécute avec succès. Merci Smit !!
Rajeev Kumar Barnwal
C'est une meilleure réponse. Chemin de Windows dans r comme C: / Users / ... fonctionne et est moins déroutant que \\. La seule situation où vous voudrez que le chemin soit avec \ est lorsque vous faites un appel shell () comme shell ("cd C: \\ Utilisateurs \\ && faire quelque chose")
Monduiz
27

Veuillez ne pas marquer cette réponse comme correcte car smitec a déjà répondu correctement. J'inclus une fonction pratique que je garde dans ma bibliothèque .First qui permet de convertir un chemin Windows au format qui fonctionne dans R (les méthodes décrites par Sacha Epskamp). Copiez simplement le chemin dans votre presse-papiers (ctrl + c), puis exécutez la fonction en tant que pathPrep(). Pas besoin d'argument. Le chemin est correctement imprimé sur votre console et écrit dans votre presse-papiers pour un collage facile dans un script. J'espère que c'est 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)
}
Tyler Rinker
la source
1
J'étais sur le point d'écrire ceci et je suis content d'avoir vérifié en premier. Merci beaucoup. Je suis vraiment surpris que cela n'ait pas été divulgué dans l'un des packages les plus populaires (à moins que je ne le manque). Je vais l'utiliser dans mon script, donc je posterai la légère variation lorsque j'aurai terminé.
Rob
1
Il est maintenant dans le package de développement des rapports et sera finalement poussé vers CRAN. Voir WP(chemin Windows) dans le package de développement de rapports.
Tyler Rinker
11

Solution

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

Explication

R n'est pas capable de comprendre correctement les chemins de fenêtres normaux car le "\"a une signification particulière - il est utilisé comme caractère d'échappement pour donner une signification spéciale aux caractères suivants ( \npour newline, \tpour tab, \rpour retour chariot, ..., regardez ici ).

Parce que R ne connaît pas la séquence dont \Uil se plaint. Remplacez simplement le "\"par "/"ou utilisez un élément supplémentaire "\"pour échapper "\"à sa signification particulière et tout fonctionne bien.

Alternative

Sur Windows, je pense que la meilleure chose à faire pour améliorer votre flux de travail avec des chemins spécifiques à Windows dans R est d'utiliser par exemple AutoHotkey qui permet des raccourcis clavier personnalisés:

  • définir un raccourci clavier, par exemple Cntr- Shift-V
  • lui attribue une procédure qui remplace les contre-obliques dans votre Presse-papiers par des slaches ...
  • chaque fois que vous voulez copier-coller un chemin dans R, vous pouvez utiliser Cntr- Shift- Vau lieu de Cntr-V
  • Et voilà

Extrait de code AutoHotkey (lien vers la page d'accueil)

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

Ma solution consiste à définir un extrait de code RStudio comme suit:

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

Cet extrait de code convertit les contre-obliques \en doubles contre-obliques \\. La version suivante fonctionnera si vous préférez convertir des backslahes en barres obliques /.

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

Une fois votre extrait de code préféré défini, collez un chemin depuis le presse-papiers en tapant p- p- TAB- ENTER(c'est-à-dire pp, puis la touche de tabulation, puis entrez) et le chemin sera inséré comme par magie avec des délimiteurs conviviaux R.

Josh Gilfillan
la source
Je ne savais pas que des extraits existaient dans R Studio avant de voir cela. C'est génial.
David le
3

Remplacez les barres obliques \ par des barres obliques / lors de l'exécution de la machine Windows

Matthieu J Watts
la source
2

Le remplacement de la barre oblique inverse par une barre oblique a fonctionné pour moi sous Windows.

Ehteshaam
la source
1

La meilleure façon de gérer cela dans le cas d'un fichier txt qui contient des données pour l'exploration de texte (discours, newsletter, etc.) est de remplacer "\" par "/".

Exemple:

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

Je sais que c'est vraiment vieux, mais si vous copiez et collez de toute façon, vous pouvez simplement utiliser:

read.csv(readClipboard())

readClipboard () échappe les barres obliques inverses pour vous. N'oubliez pas de vous assurer que le ".csv" est inclus dans votre copie, peut-être avec ceci:

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

Et si vous voulez vraiment minimiser votre saisie, vous pouvez utiliser certaines fonctions:

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


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

#copy directory path
setWD()

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

Je pense que R lit le «\» dans la chaîne comme un caractère d'échappement. Par exemple \ n crée une nouvelle ligne dans une chaîne, \ t crée un nouvel onglet dans la chaîne.

'\' fonctionnera car R reconnaîtra cela comme une barre oblique inverse normale.

mileslilly2
la source
0

readClipboard()fonctionne directement aussi. Copiez le chemin dans votre presse-papiers

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

ensuite

readClipboard()

apparaît comme

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

Un moyen simple consiste à utiliser python. dans le type de terminal python

r "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" et vous obtiendrez 'C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv'

user3827333
la source