Проблеми із шляхом до файлу в 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тому, щоб вставити a \, потрібно вставити екран, \який є\\


1
Це правда, просто замініть \ на \\, і сценарій успішно працює. Спасибі Сміт !!
Радєєв Кумар Барнвал

Це краща відповідь. Шлях з Windows у такій програмі, як C: / Users / ..., працює і є менш заплутаним, ніж \\. Єдина ситуація, коли ви хочете, щоб шлях був з \, це коли ви робите виклик shell () як shell ("cd C: \\ Users \\ && щось роблять")
Monduiz

27

Будь ласка, не позначайте цю відповідь як правильну, оскільки smitec вже відповів правильно. Я включаю зручну функцію, яку я зберігаю у своїй. Перша бібліотека, яка робить перетворення шляху 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)
}

1
Я збирався написати це, і я радий, що перевірив перший. Дякую тонна. Я справді здивований, що це не потрапило в один із найпопулярніших пакунків (якщо я просто не пропускаю). Я буду використовувати це у своєму сценарії, тому опублікую невеликі зміни, коли закінчу.
Роб

1
Зараз це в пакеті розробки звітів, і врешті-решт буде передано до CRAN. Див. WP(Шлях до Windows) у пакунку dev для звітів.
Тайлер Рінкер,

11

Рішення

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

Пояснення

R не може правильно зрозуміти звичайні шляхи Windows, оскільки "\"має спеціальне значення - він використовується як символ втечі, щоб надати наступним символам особливе значення ( \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, а потім клавіша табуляції, а потім введіть), і шлях буде чарівним чином вставлений з роздільниками, що відповідають R.


Я не знав, що фрагменти існують у R Studio, поки не побачив цього. Це круто.
Девід


2

Заміна зворотної косої риски на скісну вперед працювала у мене в Windows.


1

Найкращий спосіб вирішити це у випадку файлу txt, який містить дані для видобутку тексту (мова, інформаційний бюлетень тощо), - замінити "\" на "/".

Приклад:

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 читає '\' у рядку як символ втечі. Наприклад, \ 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_diss similarity.csv", і ви отримаєте назад 'C: \ Users \ surfcat \ Desktop \ 2006_diss similarity.csv'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.