Problemas de caminho de arquivo em R usando Windows (erro de “dígitos hexadecimais na sequência de caracteres”)


89

Eu executo o R no Windows e tenho um arquivo csv na área de trabalho. Eu carrego como segue,

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

mas o R dá a seguinte mensagem de erro

Erro: '\ U' usado sem dígitos hexadecimais na sequência de caracteres começando com "C: \ U"

Qual é a maneira correta de carregar este arquivo. Estou usando o Vista

Respostas:


134

substitua todos \por \\.

ele está tentando escapar do próximo caractere neste caso, Uentão para inserir um \você precisa inserir um \que é\\


1
Isso é verdade, simplesmente substitua \ por \\ e o script será executado com êxito. Obrigado Smit !!
Rajeev Kumar Barnwal,

Esta é uma resposta melhor. Caminho do Windows em r como C: / Usuários / ... funciona e é menos confuso do que \\. A única situação em que você desejará que o caminho esteja \ é quando você fizer uma chamada de shell () como shell ("cd C: \\ Usuários \\ && fazer algo")
Monduiz

27

Não marque esta resposta como correta, pois smitec já respondeu corretamente. Estou incluindo uma função de conveniência que mantenho em minha biblioteca .First, que faz a conversão de um caminho do Windows para o formato que funciona em R (os métodos descritos por Sacha Epskamp). Simplesmente copie o caminho para sua área de transferência (ctrl + c) e execute a função como pathPrep(). Não há necessidade de uma discussão. O caminho é impresso no console corretamente e escrito na área de transferência para fácil colagem em um script. Espero que isso seja ú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)
}

1
Eu estava prestes a escrever isso e estou feliz por ter verificado primeiro. Muito obrigado. Estou realmente surpreso que isso não tenha vazado em um dos pacotes mais populares por aí (a menos que eu esteja apenas perdendo). Vou usar isso em meu script, então postarei a pequena variação quando terminar.
Rob

1
Agora está no pacote de desenvolvimento de relatórios e será enviado ao CRAN eventualmente. Veja WP(caminho do Windows) no pacote de desenvolvimento de relatórios.
Tyler Rinker

11

Solução

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

Explicação

R não é capaz de compreender os caminhos normais do Windows corretamente porque o "\"tem um significado especial - é usado como caractere de escape para dar significado especial aos caracteres a seguir ( \npara nova linha, \tpara tab, \rpara retorno de carro, ..., dê uma olhada aqui ).

Porque R não conhece a sequência, \Uele reclama. Basta substituir "\"por "/"ou usar um adicional "\"para escapar "\"do seu significado especial e tudo funcionará bem.

Alternativo

No Windows, acho que a melhor coisa a fazer para melhorar seu fluxo de trabalho com caminhos específicos do Windows em R é usar, por exemplo, AutoHotkey que permite teclas de atalho personalizadas:

  • definir uma tecla de atalho, por exemplo Cntr- Shift-V
  • atribui a ele um procedimento que substitui barras invertidas em sua área de transferência por barras ...
  • sempre que quiser copiar e colar um caminho no R, você pode usar Cntr- Shift- em Vvez de Cntr-V
  • Et-voila

Snippet de código do AutoHotkey (link para a página inicial)

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

5

Minha solução é definir um snippet RStudio da seguinte maneira:

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

Este snippet converte barras invertidas \em barras invertidas duplas \\. A versão a seguir funcionará se você preferir converter backslahes em barras normais /.

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

Uma vez que seu trecho preferido é definido, cole um caminho da área de transferência digitando p- p- TAB- ENTER(isto é pp e então a tecla tab e então enter) e o caminho será inserido magicamente com delimitadores R amigáveis.


Eu não sabia que fragmentos existiam no R Studio até que vi isso. Isso é incrível.
David

3

Substitua as barras invertidas \ por barras / ao executar uma máquina com Windows


2

Substituir a barra invertida por barra funcionou para mim no Windows.


1

A melhor maneira de lidar com isso no caso do arquivo txt que contém dados para mineração de texto (fala, boletim informativo, etc.) é substituir "\" por "/".

Exemplo:

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

1

Eu sei que isso é muito antigo, mas se você estiver copiando e colando mesmo assim, você pode apenas usar:

read.csv(readClipboard())

readClipboard () escapa as barras invertidas para você. Apenas lembre-se de certificar-se de que o ".csv" esteja incluído em sua cópia, talvez com isto:

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

E se você realmente deseja minimizar a digitação, pode usar algumas funções:

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


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

#copy directory path
setWD()

#copy file name
df <- readCSV()

0

Acho que R está lendo o '\' na string como um caractere de escape. Por exemplo, \ n cria uma nova linha dentro de uma string, \ t cria uma nova guia dentro da string.

'\' funcionará porque R reconhecerá isso como uma barra invertida normal.


0

readClipboard()funciona diretamente também. Copie o caminho para a sua área de transferência

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

Então

readClipboard()

aparece como

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

-3

Uma maneira simples é usar o python. no tipo de terminal python

r "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" e você receberá de volta 'C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.