Проблемы с путем к файлу в R с использованием Windows (ошибка «Шестнадцатеричные цифры в строке символов»)


89

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

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

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

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

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

Ответы:


134

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

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


1
Это правда, просто замените \ на \\, и сценарий будет успешно выполнен. Спасибо, Смит !!
Раджив Кумар Барнвал

Это лучший ответ. Путь из Windows в r как C: / Users / ... работает и менее запутан, чем \\. Единственная ситуация, когда вы хотите, чтобы путь был с \, - это когда вы выполняете вызов shell () как shell ("cd C: \\ Users \\ && do something")
Monduiz

27

Пожалуйста, не отмечайте этот ответ как правильный, так как smitec уже ответил правильно. Я включаю в свою библиотеку .First удобную функцию, которая преобразует путь Windows в формат, который работает в R (методы, описанные Сашей Эпскамп). Просто скопируйте путь в буфер обмена (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)
}

1
Я собирался написать это и рад, что сначала проверил. Благодаря тонну. Я действительно удивлен, что это не просочилось в один из наиболее популярных пакетов (если только я его просто не упустил). Я собираюсь использовать это в своем сценарии, поэтому я опубликую небольшое изменение, когда закончу.
Роб

1
Сейчас он находится в пакете разработки отчетов и в конечном итоге будет перенесен в CRAN. См. WP(Путь Windows) в пакете разработчиков отчетов.
Тайлер Ринкер

11

Решение

Попробуй это: 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
  • И вуаля

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

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

5

Мое решение - определить фрагмент RStudio следующим образом:

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

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

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

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


Я не знал, что сниппеты существуют в R Studio, пока не увидел это. Это круто.
Дэвид


2

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


1

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

Пример:

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

1

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

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()

0

Я думаю, что R читает '\' в строке как escape-символ. Например, \ n создает новую строку в строке, \ t создает новую вкладку в строке.

'\' будет работать, потому что R распознает это как обычную обратную косую черту.


0

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

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

затем

readClipboard()

выглядит как

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

-3

Самый простой способ - использовать python. в терминальном типе python

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.