ปัญหาเส้นทางไฟล์ใน 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ดังนั้นในการแทรก\คุณต้องแทรกค่า Escape \ซึ่งเป็น\\


1
สิ่งนี้เป็นจริงเพียงแค่แทนที่ \ ด้วย \\ และสคริปต์จะทำงานได้สำเร็จ ขอบคุณ Smit !!
Rajeev Kumar Barnwal

นี่คือคำตอบที่ดีกว่า เส้นทางจาก Windows ใน r เช่น C: / Users / ... ทำงานและสับสนน้อยกว่า \\. สถานการณ์เดียวที่คุณต้องการให้พา ธ อยู่กับ \ คือเมื่อคุณทำการเรียกเชลล์ () เช่นเชลล์ ("cd C: \\ Users \\ && do something")
Monduiz

27

โปรดอย่าทำเครื่องหมายคำตอบนี้ว่าถูกต้องเนื่องจาก 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)
}

1
ฉันกำลังจะเขียนสิ่งนี้และฉันดีใจที่ได้ตรวจสอบก่อน ขอบคุณมาก ฉันแปลกใจจริงๆที่ไม่ได้รั่วไหลออกไปในแพ็คเกจยอดนิยมอื่น ๆ (เว้นแต่ฉันจะพลาดไป) ฉันจะใช้สิ่งนี้ในสคริปต์ของฉันดังนั้นฉันจะโพสต์รูปแบบเล็กน้อยเมื่อฉันทำเสร็จแล้ว
Rob

1
ตอนนี้อยู่ในแพ็คเกจการพัฒนารายงานและจะถูกส่งไปที่ CRAN ในที่สุด ดูWP(windows path)ในแพ็คเกจ dev รายงาน
Tyler Rinker

11

วิธีการแก้

ลองสิ่งนี้: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

คำอธิบาย

R ไม่สามารถเข้าใจเส้นทาง windows ปกติได้อย่างถูกต้องเนื่องจาก"\"มีความหมายพิเศษ - ใช้เป็นอักขระหลีกเพื่อให้อักขระต่อไปนี้มีความหมายพิเศษ ( \nสำหรับขึ้นบรรทัดใหม่\tสำหรับแท็บ\rสำหรับการกลับรถ ... ดูที่นี่ )

เพราะ R ไม่รู้ลำดับ\Uมันบ่น เพียงแค่แทนที่"\"ด้วย"/"หรือใช้เพิ่มเติม "\"เพื่อหลีกเลี่ยงไฟล์ "\"จากความหมายพิเศษและทุกอย่างก็ราบรื่น

ทางเลือก

บน windows ฉันคิดว่าสิ่งที่ดีที่สุดในการปรับปรุงเวิร์กโฟลว์ของคุณด้วยพา ธ เฉพาะของ windows ใน R คือการใช้เช่น AutoHotkey ซึ่งอนุญาตให้ใช้ปุ่มลัดที่กำหนดเอง:

  • กำหนด Hotkey เช่นCntr-Shift -V
  • กำหนดขั้นตอนที่แทนที่แบ็กสแลชภายในคลิปบอร์ดของคุณด้วยเครื่องหมายทับ ...
  • เมื่อใดก็ตามที่คุณต้องการคัดลอกวางเส้นทางลงใน R คุณสามารถใช้Cntr- Shift- VแทนCntr-V
  • Et-voila

AutoHotkey Code Snippet (ลิงก์ไปยังหน้าแรก)

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

5

My Solutionคือการกำหนดข้อมูลโค้ด RStudioดังต่อไปนี้:

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

ข้อมูลโค้ดนี้จะแปลงทับขวา\เข้า \\backslashes รุ่นต่อไปจะทำงานถ้าคุณชอบที่จะแปลง backslahes /ไปทับ

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

เมื่อกำหนดตัวอย่างข้อมูลที่คุณต้องการแล้วให้วางเส้นทางจากคลิปบอร์ดโดยพิมพ์p- p- TAB- ENTER(นั่นคือ pp จากนั้นกดปุ่มแท็บแล้วป้อน) จากนั้นพา ธ จะถูกแทรกอย่างน่าอัศจรรย์ด้วยตัวคั่นที่เป็นมิตรกับ R


ฉันไม่รู้ว่ามีตัวอย่างอยู่ใน R Studio จนกระทั่งฉันเห็นสิ่งนี้ นี่มันเจ๋งมาก.
เดวิด



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_dissimilarity.csv" และคุณจะได้รับ "C: \ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.