使用Windows的R中的文件路径问题(“字符串中的十六进制数字”错误)


89

我在Windows上运行R,并且在桌面上有一个csv文件。我将其加载如下

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

但是R给出以下错误信息

错误:字符串“ C:\ U”中未使用十六进制数字的'\ U'

那么加载此文件的正确方法是什么。我正在使用Vista

Answers:


134

更换所有\\\

它试图在这种情况下转义下一个字符,U因此要插入a \,需要插入转义\\\


1
只需将\替换为\\,这是正确的,脚本将成功运行。谢谢史密斯!
Rajeev Kumar Barnwal '16

这是一个更好的答案。R中的Windows路径(如C:/ Users / ...)可以正常工作,并且比\\少混淆。唯一希望使用\路径的情况是当您执行shell()调用时,如shell(“ cd C:\\ Users \\ &&做某事”)
Monduiz,2017年

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
我正要写这篇文章,很高兴我先检查了一下。万分感谢。我真的很惊讶这没有泄漏到其中一个最受欢迎的软件包中(除非我只是想念它)。我将在脚本中使用它,因此我将在完成后发布稍有变化的内容。
罗布

1
现在它已包含在报告开发包中,并将最终推送到CRAN。请参阅报表开发包中的WP(Windows路径)
泰勒·林克

11

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

说明

R无法正确理解正常的Windows路径,因为R"\"具有特殊含义-用作转义字符以赋予后续字符特殊含义(\n对于换行符,\t制表符,\r回车符,...,请看这里)。

因为R不知道\U它抱怨的顺序。只需更换"\""/",也可以附加 "\"逃脱 "\"从它的特殊意义,一切运作顺利。

另类

在Windows上,我认为使用R中Windows特定路径来改善工作流程的最佳方法是使用例如AutoHotkey,它允许自定义热键:

  • 定义热键,如Cntr- Shift-V
  • 向其分配一个过程,该过程将剪贴板中的反斜杠替换为slashes ...
  • 当过要复制粘贴的路径为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- TABENTER即PP和然后tab键,然后输入)和路径将被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”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.