web-dev-qa-db-fra.com

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

J'exécute R sur Windows et 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

69
user297850

remplacez tous les \ par \\.

il essaie d'échapper au caractère suivant dans ce cas la U afin d'insérer un \ vous devez insérer un \ échappé qui est \\

105
smitec

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 convertit un chemin Windows au format qui fonctionne en R (les méthodes décrites par Sacha Epskamp). Copiez simplement le chemin dans votre presse-papiers (ctrl + c), puis lancez la fonction sous la forme pathPrep(). Pas besoin d'un argument. Le chemin est correctement imprimé sur votre console et écrit dans votre presse-papiers pour faciliter le collage 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)
}
26
Tyler Rinker

Solution

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

Explication

R n’est pas en mesure 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 (\n pour une nouvelle ligne, \t pour un onglet, \r pour un retour chariot, ..., regardez ici ).

Parce que R ne connaît pas la séquence \U, il se plaint. Il suffit de remplacer le "\" par le "/" ou d'utiliser un "\" supplémentaire pour échapper au "\" de sa signification particulière et tout se passera 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 de créer des raccourcis clavier personnalisés:

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

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

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

Ma solution définit un extrait de code RStudio comme suit:

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

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

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

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

4
Josh Gilfillan

Remplacez les barres obliques\par des barres obliques/lorsque vous utilisez Windows

1
Matthew J Watts

La meilleure façon de traiter cela dans le cas d'un fichier txt contenant des données pour l'exploration de texte (discours, lettre d'information, etc.) est de remplacer "\" par "/".

Exemple: 

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

Je sais que c'est vraiment vieux, mais si vous copiez et collez quand même, vous pouvez simplement utiliser:

read.csv(readClipboard())

readClipboard () échappe pour vous aux barres obliques. 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 frappe, 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()
1
Kevin Mc

Remplacer la barre oblique inverse par une barre oblique a fonctionné pour moi sous Windows.

0
Ehteshaam

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

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

Ensuite

readClipboard()

apparaît comme

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

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 parce que R reconnaîtra cela comme une barre oblique inverse normale. 

0
mileslilly2