使用 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 <- 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 中的文件路径问题(“字符串中的十六进制数字”错误)的主要内容,如果未能解决你的问题,请参考以下文章
“系统找不到指定的路径”,当它存在并且在 Windows 上具有所有权限时,在 R
如何将资源文件夹中的路径与 Windows 媒体播放器一起使用
使用 Windows 资源管理器获取要存储在表中的文件的路径(字符串)