Sự cố đường dẫn tệp trong R sử dụng Windows (lỗi “Chữ số hex trong chuỗi ký tự”)


89

Tôi chạy R trên Windows và có tệp csv trên Máy tính để bàn. Tôi tải nó như sau,

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

nhưng R đưa ra thông báo lỗi sau

Lỗi: '\ U' được sử dụng mà không có chữ số hex trong chuỗi ký tự bắt đầu "C: \ U"

Vậy cách chính xác để tải tệp này là gì. Tôi đang sử dụng Vista

Câu trả lời:


134

thay thế tất cả \bằng \\.

nó đang cố gắng thoát ký tự tiếp theo trong trường hợp này, Uvì vậy để chèn một ký tự, \bạn cần phải chèn một ký tự thoát \đó là\\


1
Điều này đúng, chỉ cần thay thế \ bằng \\ và tập lệnh chạy thành công. Cảm ơn Smit !!
Rajeev Kumar Barnwal

Đây là một câu trả lời tốt hơn. Đường dẫn từ Windows trong r như C: / Users / ... hoạt động và ít gây nhầm lẫn hơn \\. Tình huống duy nhất mà bạn muốn đường dẫn đến với \ là khi bạn thực hiện lệnh gọi shell () giống như shell ("cd C: \\ Users \\ && làm gì đó")
Monduiz 30/03/17

27

Vui lòng không đánh dấu câu trả lời này là đúng vì smitec đã trả lời đúng. Tôi đang bao gồm một chức năng tiện lợi mà tôi giữ trong thư viện .First của mình giúp chuyển đổi đường dẫn cửa sổ sang định dạng hoạt động trong R (các phương pháp được mô tả bởi Sacha Epskamp). Chỉ cần sao chép đường dẫn đến khay nhớ tạm của bạn (ctrl + c) và sau đó chạy hàm dưới dạng pathPrep(). Không cần tranh cãi. Đường dẫn được in vào bảng điều khiển của bạn một cách chính xác và được ghi vào khay nhớ tạm để dễ dàng dán vào tập lệnh. Hy vọng điều này là hữu ích.

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
Tôi đã định viết cái này và tôi rất vui vì tôi đã kiểm tra trước. Cảm ơn rất nhiều. Tôi thực sự ngạc nhiên vì điều này đã không bị rò rỉ vào một trong những gói phổ biến hơn hiện có (trừ khi tôi chỉ thiếu nó). Tôi sẽ sử dụng điều này trong kịch bản của mình nên tôi sẽ đăng một chút biến thể khi tôi hoàn thành.
Rob

1
Nó hiện nằm trong gói phát triển báo cáo và cuối cùng sẽ được chuyển sang CRAN. Xem WP(đường dẫn cửa sổ) trong gói nhà phát triển báo cáo.
Tyler Rinker

11

Giải pháp

Thử đi: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

Giải trình

R không thể hiểu chính xác các đường dẫn cửa sổ bình thường vì nó "\"có ý nghĩa đặc biệt - nó được sử dụng làm ký tự thoát để cung cấp cho các ký tự sau có ý nghĩa đặc biệt ( \nđối với dòng mới, \tđối với tab, \rđối với dấu xuống dòng, ..., hãy xem tại đây ).

Vì R không biết trình tự \Umà nó phàn nàn. Chỉ cần thay thế "\"bằng "/"hoặc sử dụng một bổ sung "\"để thoát khỏi "\" ý nghĩa đặc biệt của nó và mọi thứ hoạt động trơn tru.

Thay thế

Trên windows, tôi nghĩ điều tốt nhất cần làm để cải thiện quy trình làm việc của bạn với các đường dẫn dành riêng cho windows trong R là sử dụng ví dụ: AutoHotkey cho phép các phím nóng tùy chỉnh:

  • xác định một Hotkey, ví dụ: Cntr-Shift -V
  • gán cho nó một thủ tục thay thế các dấu gạch chéo ngược trong Clipboard của bạn bằng các dấu gạch chéo ...
  • khi nào bạn muốn sao chép, dán một đường dẫn vào R, bạn có thể sử dụng Cntr- Shift- Vthay vì Cntr-V
  • Et-voila

Đoạn mã AutoHotkey (liên kết đến trang chủ)

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

5

Giải pháp của tôi là xác định một đoạn mã RStudio như sau:

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

Đoạn mã này chuyển đổi dấu gạch chéo ngược \thành dấu gạch chéo ngược kép \\. Phiên bản sau sẽ hoạt động nếu bạn muốn chuyển đổi dấu gạch chéo ngược thành dấu gạch chéo về phía trước /.

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

Sau khi đoạn mã ưa thích của bạn được xác định, hãy dán một đường dẫn từ khay nhớ tạm bằng cách nhập p- p- TAB- ENTER(đó là pp, sau đó nhấn phím tab rồi enter) và đường dẫn sẽ được chèn một cách kỳ diệu với R dấu phân cách thân thiện.


Tôi đã không biết rằng các đoạn trích tồn tại trong R Studio cho đến khi tôi nhìn thấy điều này. Điều này thật tuyệt.
David

3

Thay thế dấu gạch chéo ngược \ bằng dấu gạch chéo lên phía trước / khi chạy máy tính windows


2

Tôi thay thế dấu gạch chéo ngược bằng dấu gạch chéo lên trên Windows.


1

Cách tốt nhất để giải quyết vấn đề này trong trường hợp tệp txt chứa dữ liệu để khai thác văn bản (lời nói, bản tin, v.v.) là thay thế "\" bằng "/".

Thí dụ:

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

1

Tôi biết điều này thực sự cũ, nhưng nếu bạn đang sao chép và dán, bạn chỉ có thể sử dụng:

read.csv(readClipboard())

readClipboard () thoát khỏi các dấu gạch chéo ngược cho bạn. Chỉ cần nhớ đảm bảo rằng ".csv" được bao gồm trong bản sao của bạn, có lẽ với điều này:

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

Và nếu bạn thực sự muốn giảm thiểu việc đánh máy, bạn có thể sử dụng một số chức năng:

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


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

#copy directory path
setWD()

#copy file name
df <- readCSV()

0

Tôi nghĩ rằng R đang đọc '\' trong chuỗi như một ký tự thoát. Ví dụ: \ n tạo một dòng mới trong một chuỗi, \ t tạo một tab mới trong chuỗi.

'\' sẽ hoạt động vì R sẽ nhận ra đây là dấu gạch chéo ngược bình thường.


0

readClipboard()cũng hoạt động trực tiếp. Sao chép đường dẫn vào khay nhớ tạm của bạn

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

Sau đó

readClipboard()

Xuất hiện dưới dạng

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

-3

Một cách đơn giản là sử dụng python. trong loại thiết bị đầu cuối python

r "C: \ Users \ Surcat \ Desktop \ 2006_dissimilarity.csv" và bạn sẽ nhận lại 'C: \ Users \ Surcat \ Desktop \ 2006_dissimilarity.csv'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.