Проблемы с путями в R в Windows (ошибка «шестнадцатеричные цифры в строке символов») - PullRequest
78 голосов
/ 08 декабря 2011

Я запускаю R в Windows и имею csv-файл на рабочем столе.Я загружаю его следующим образом,

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

, но R выдает следующее сообщение об ошибке

Ошибка: «\ U» используется без шестнадцатеричных цифр в символьной строке, начинающейся «C: \U "

Итак, как правильно загрузить этот файл.Я использую Vista

Ответы [ 11 ]

120 голосов
/ 08 декабря 2011

заменить все \ на \\.

он пытается экранировать следующий символ в этом случае U, поэтому для вставки \ вам нужно вставить экранированный \, который равен \\

27 голосов
/ 08 декабря 2011

Пожалуйста, не отмечайте этот ответ как правильный, так как smitec уже ответил правильно.Я включил вспомогательную функцию, которую я храню в своей библиотеке .First, которая конвертирует путь Windows в формат, который работает в R (методы, описанные Sacha Epskamp)Просто скопируйте путь в буфер обмена (ctrl + c) и затем запустите функцию как pathPrep().Не нужно спорить.Путь выводится на вашу консоль правильно и записывается в буфер обмена для легкого вставки в скрипт.Надеюсь, что это полезно.

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)
}
8 голосов
/ 15 января 2013

Решение

Попробуйте: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

Объяснение

R не может понять нормальные пути Windowsправильно, потому что "\" имеет специальное значение - он используется в качестве escape-символа для придания следующим символам специального значения (\n для новой строки, \t для табуляции, \r для возврата каретки, ..., естьпосмотрите здесь ).

Поскольку R не знает последовательность \U, он жалуется.Просто замените "\" на "/" или используйте дополнительный "\", чтобы убрать "\" из его специального значения, и все будет работать гладко.

Альтернатива

В Windows, я думаю, лучшее, что нужно сделать, чтобы улучшить рабочий процесс с помощью конкретных путей для Windows в R, это использовать, например, AutoHotkey, который допускает использование пользовательских горячих клавиш:

  • определяет горячую клавишу, например, Cntr - Shift - V
  • назначает ей процедуру, которая заменяет обратную косую чертув вашем буфере обмена со слэшами ...
  • когда вы хотите скопировать, вставьте путь в R, вы можете использовать Cntr - Shift - V вместо Cntr - V
  • Et-voila

Фрагмент кода AutoHotkey (ссылкана главную страницу)

^+v::
StringReplace, clipboard, clipboard, \, /, All 
SendInput, %clipboard% 
4 голосов
/ 14 ноября 2016

Мое решение заключается в определении фрагмента RStudio следующим образом:

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

Этот фрагмент преобразует обратную косую черту \ в двойную обратную косую черту \\. Следующая версия будет работать, если вы предпочитаете конвертировать обратные слэши в прямые слэши /.

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

Как только ваш предпочтительный фрагмент определен, вставьте путь из буфера обмена, набрав p - p - TAB - ENTER ( это pp, затем клавиша табуляции, а затем ввод), и путь будет волшебным образом вставлен с помощью R-дружественных разделителей.

1 голос
/ 30 ноября 2018

Я знаю, что это действительно старая версия, но если вы все равно копируете и вставляете, вы можете просто использовать:

read.csv(readClipboard())

readClipboard () экранирует обратную косую черту для вас. Просто не забудьте убедиться, что «.csv» включен в вашу копию, возможно, с этим:

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

А если вы действительно хотите свести к минимуму набор текста, вы можете использовать некоторые функции:

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


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

#copy directory path
setWD()

#copy file name
df <- readCSV()
1 голос
/ 16 января 2018

Заменить обратную косую черту \ на прямую косую черту / при работе на машине с Windows

1 голос
/ 12 ноября 2017

Лучший способ справиться с этим в случае txt-файла, который содержит данные для интеллектуального анализа текста (речь, новостная рассылка и т. Д.), - это заменить "\" на "/".

Пример:

file<-Corpus(DirSource("C:/Users/PRATEEK/Desktop/training tool/Text Analytics/text_file_main"))
0 голосов
/ 16 января 2019

readClipboard() тоже работает напрямую. Скопируйте путь в буфер обмена

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

Тогда

readClipboard()

отображается как

[1] "C:\\Users\\surfcat\\Desktop\\2006_dissimilarity.csv"
0 голосов
/ 30 ноября 2018

Замена обратной косой черты на прямую косую черту у меня работала в Windows.

0 голосов
/ 02 июня 2015

Простой способ - использовать Python. в терминале Python типа

г "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv" и ты вернешься 'C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv'

...