Problemy ze ścieżką pliku w języku R w systemie Windows (błąd „Cyfry szesnastkowe w ciągu znaków”)

89

Uruchamiam R w systemie Windows i mam plik csv na pulpicie. Ładuję to w następujący sposób,

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

ale R wyświetla następujący komunikat o błędzie

Błąd: użyto „\ U” bez cyfr szesnastkowych w ciągu znaków rozpoczynającym się od „C: \ U”

Więc jaki jest właściwy sposób załadowania tego pliku. Używam Vista

user297850
źródło

Odpowiedzi:

134

Wymień wszystkie \z \\.

w tym przypadku próbuje uciec od następnego znaku, Uwięc aby wstawić a \, musisz wstawić znak ucieczki, \czyli jest\\

smitec
źródło
1
To prawda, po prostu zamień \ na \\ i skrypt zostanie uruchomiony pomyślnie. Dzięki Smit !!
Rajeev Kumar Barnwal
To jest lepsza odpowiedź. Ścieżka z Windows w r jak C: / Users / ... działa i jest mniej zagmatwana niż \\. Jedyną sytuacją, w której chcesz, aby ścieżka była z \, jest wykonanie wywołania powłoki (), takiego jak shell ("cd C: \\ Users \\ && zrób coś")
Monduiz
27

Proszę nie oznaczać tej odpowiedzi jako poprawnej, ponieważ smitec już odpowiedział poprawnie. Dołączam wygodną funkcję, którą trzymam w mojej bibliotece .First, która umożliwia konwersję ścieżki okna do formatu działającego w R (metody opisane przez Sachę Epskampa). Po prostu skopiuj ścieżkę do schowka (ctrl + c), a następnie uruchom funkcję jako pathPrep(). Nie ma potrzeby do kłótni. Ścieżka jest poprawnie drukowana do konsoli i zapisywana w schowku w celu łatwego wklejenia do skryptu. Mam nadzieję, że to jest pomocne.

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)
}
Tyler Rinker
źródło
1
Miałem właśnie to napisać i cieszę się, że najpierw sprawdziłem. Dzięki za tonę. Jestem naprawdę zaskoczony, że nie wyciekło to do jednego z bardziej popularnych pakietów (chyba że mi go brakuje). Zamierzam użyć tego w swoim skrypcie, więc po zakończeniu opublikuję niewielką zmianę.
Rob
1
Jest teraz w pakiecie do tworzenia raportów i ostatecznie zostanie przeniesiony do CRAN. Zobacz WP(ścieżka do systemu Windows) w pakiecie dla programistów raportów.
Tyler Rinker
11

Rozwiązanie

Spróbuj tego: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

Wyjaśnienie

R nie jest w stanie poprawnie zrozumieć normalnych ścieżek okien, ponieważ "\"ma specjalne znaczenie - jest używany jako znak ucieczki, aby nadać kolejnym znakom specjalne znaczenie ( \ndla nowej linii, \tdla tabulatora, \rdla powrotu karetki, ..., spójrz tutaj ).

Ponieważ R nie zna sekwencji \U, narzeka. Wystarczy wymienić "\"z "/"lub użyć dodatkowego "\"aby uciec "\"od jego szczególnego znaczenia i wszystko działa gładka.

Alternatywny

W systemie Windows myślę, że najlepszą rzeczą, jaką można zrobić, aby poprawić przepływ pracy ze ścieżkami specyficznymi dla systemu Windows w R, jest użycie np. AutoHotkey, który pozwala na niestandardowe skróty klawiszowe:

  • zdefiniuj klawisz skrótu, np. Cntr- Shift-V
  • przypisuje mu procedurę, która zastępuje ukośniki odwrotne w schowku na slachy ...
  • kiedy chcesz skopiować, wkleić ścieżkę do R, możesz użyć Cntr- Shift- Vzamiast Cntr-V
  • Gotowe

Fragment kodu AutoHotkey (łącze do strony głównej)

^+v::
StringReplace, clipboard, clipboard, \, /, All 
SendInput, %clipboard% 
petermeissner
źródło
5

Moje rozwiązanie polega na zdefiniowaniu fragmentu kodu RStudio w następujący sposób:

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

Ten fragment kodu przekształca ukośniki odwrotne \w podwójne ukośniki odwrotne \\. Następująca wersja będzie działać, jeśli wolisz konwertować ukośniki odwrotne na ukośniki /.

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

Po zdefiniowaniu preferowanego fragmentu wklej ścieżkę ze schowka, wpisując p- p- TAB- ENTER(czyli pp, a następnie klawisz tabulatora, a następnie enter), a ścieżka zostanie magicznie wstawiona z przyjaznymi ogranicznikami R.

Josh Gilfillan
źródło
Nie wiedziałem, że fragmenty istnieją w R Studio, dopóki tego nie zobaczyłem. To jest niesamowite.
David
3

Zamień lewe ukośniki \ na prawe ukośniki / na komputerze z systemem Windows

Matthew J Watts
źródło
2

Zastąpienie ukośnika odwrotnego ukośnikiem w przód działało u mnie w systemie Windows.

Ehteshaam
źródło
1

Najlepszym sposobem na rozwiązanie tego problemu w przypadku pliku txt, który zawiera dane do eksploracji tekstu (mowa, newsletter, itp.) Jest zastąpienie „\” znakiem „/”.

Przykład:

file<-Corpus(DirSource("C:/Users/PRATEEK/Desktop/training tool/Text Analytics/text_file_main"))
PRATEEK KUMAR
źródło
1

Wiem, że to jest naprawdę stare, ale jeśli i tak kopiujesz i wklejasz, możesz po prostu użyć:

read.csv(readClipboard())

readClipboard () wymusza dla ciebie ukośniki. Pamiętaj tylko, aby upewnić się, że w kopii znajduje się plik „.csv”, na przykład w ten sposób:

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

A jeśli naprawdę chcesz zminimalizować pisanie, możesz użyć kilku funkcji:

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


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

#copy directory path
setWD()

#copy file name
df <- readCSV()
Kevin Mc
źródło
0

Myślę, że R czyta „\” w ciągu jako znak zmiany znaczenia. Na przykład \ n tworzy nową linię w ciągu, \ t tworzy nową kartę w ciągu.

'\' zadziała, ponieważ R rozpozna to jako normalny lewy ukośnik.

mileslilly2
źródło
0

readClipboard()działa również bezpośrednio. Skopiuj ścieżkę do schowka

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

Następnie

readClipboard()

pojawia się jako

[1] "C:\\Users\\surfcat\\Desktop\\2006_dissimilarity.csv"
Renay Singh
źródło
-3

Prostym sposobem jest użycie Pythona. w typie terminala Pythona

r „C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv” i wrócisz „C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv”

user3827333
źródło