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

Posted

技术标签:

【中文标题】使用 Windows 的 R 中的文件路径问题(“字符串中的十六进制数字”错误)【英文标题】:File path issues in R using Windows ("Hex digits in character string" error) 【发布时间】:2012-01-15 13:26:34 【问题描述】:

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

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

但是 R 给出了以下错误信息

错误:在以“C:\U”开头的字符串中使用了没有十六进制数字的“\U”

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

【问题讨论】:

【参考方案1】:

将所有\ 替换为\\

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

【讨论】:

这是真的,只需将 \ 替换为 \\ 即可成功运行脚本。谢谢斯密特! 这是一个更好的答案。 r 中的 Windows 路径,如 C:/Users/... 工作并且比 \\.您希望路径与 \ 一起使用的唯一情况是当您执行 shell() 调用时,例如 shell("cd C:\\Users\\ && do something")【参考方案2】:

请不要将此回复标记为正确,因为 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)

【讨论】:

我正要写这个,很高兴我先检查了。万分感谢。我真的很惊讶这并没有泄露到那里更受欢迎的软件包之一(除非我只是想念它)。我将在我的脚本中使用它,所以我会在完成后发布细微的变化。 它现在在报告开发包中,最终将被推送到CRAN。请参阅报告开发包中的WP (windows path)。【参考方案3】:

解决方案

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

说明

R 无法正确理解正常的 Windows 路径,因为 "\" 具有特殊含义 - 它用作转义字符以赋予以下字符特殊含义(\n 用于换行符,\t 用于制表符,\r对于回车,...,have a look here)。

因为 R 不知道序列 \U 它会抱怨。只需将"\" 替换为"/" 或使用额外的"\" 以摆脱"\" 的特殊含义,一切都会顺利进行。

替代方案

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

定义一个热键,例如Cntr-Shift-V 为其分配一个过程,将剪贴板中的反斜杠替换为 懒散... 当您想将路径复制粘贴到 R 时,您可以使用 Cntr-Shift-V 而不是 Cntr-V 等等

AutoHotkey 代码片段 (link to homepage)

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

【讨论】:

【参考方案4】:

我认为 R 正在读取字符串中的“\”作为转义字符。例如 \n 在字符串中创建一个新行,\t 在字符串中创建一个新选项卡。

'\' 将起作用,因为 R 会将其识别为正常的反斜杠。

【讨论】:

【参考方案5】:

一个简单的方法是使用python。 在python终端类型中

r"C:\Users\surfcat\Desktop\2006_dissimilarity.csv" 你会回来的 'C:\Users\surfcat\Desktop\2006_dissimilarity.csv'

【讨论】:

【参考方案6】:

My Solution 是定义一个RStudio snippet 如下:

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

这个 sn-p 将反斜杠 \ 转换为双反斜杠 \\。如果您希望将反斜杠转换为正斜杠/,则以下版本可以使用。

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

定义好你的首选 sn-p 后,通过键入 p-p-TAB- 从剪贴板粘贴路径ENTER (即 pp 然后按 tab 键然后回车),路径将被神奇地插入 R 友好的分隔符。

【讨论】:

直到看到这个,我才知道 R Studio 中存在 sn-ps。这太棒了。【参考方案7】:

如果 txt 文件包含文本挖掘数据(语音、新闻通讯等),最好的处理方法是将“\”替换为“/”。

例子:

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

【讨论】:

【参考方案8】:

在运行windows机器时用正斜杠/替换反斜杠\

【讨论】:

【参考方案9】:

在 Windows 上用正斜杠替换反斜杠对我有用。

【讨论】:

【参考方案10】:

我知道这真的很老了,但是如果您仍然要复制和粘贴,则可以使用:

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()

【讨论】:

【参考方案11】:

readClipboard() 也可以直接工作。将路径复制到剪贴板中

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

然后

readClipboard()

显示为

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

【讨论】:

以上是关于使用 Windows 的 R 中的文件路径问题(“字符串中的十六进制数字”错误)的主要内容,如果未能解决你的问题,请参考以下文章

从 R 中的另一个驱动器设置工作目录

“系统找不到指定的路径”,当它存在并且在 Windows 上具有所有权限时,在 R

如何将资源文件夹中的路径与 Windows 媒体播放器一起使用

使用 Windows 资源管理器获取要存储在表中的文件的路径(字符串)

为啥 pd.read_csv 不接受 Windows 文件路径中的变量名?

2020-04-18python读取文件路径前面加r的原因