R中文件路径的原始文本字符串
在R中指定文件路径字符串时是否可以使用前缀来忽略转义字符 例如,如果我想在使用windows时读取文件R中文件路径的原始文本字符串,r,string,R,String,在R中指定文件路径字符串时是否可以使用前缀来忽略转义字符 例如,如果我想在使用windows时读取文件example.csv,我需要手动将\更改为/或\。比如说, 'E:\DATA\example.csv' 变成 'E:/DATA/example.csv' data <- read.csv('E:/DATA/example.csv') 'E:/DATA/example.csv' 数据否,这在4.0.0之前的R版本中是不可能的。抱歉。您可以使用file.path构建正确的文件路径,而不
example.csv
,我需要手动将\
更改为/
或\
。比如说,
'E:\DATA\example.csv'
变成
'E:/DATA/example.csv'
data <- read.csv('E:/DATA/example.csv')
'E:/DATA/example.csv'
数据否,这在4.0.0之前的R版本中是不可能的。抱歉。您可以使用file.path
构建正确的文件路径,而不依赖于操作系统
file.path("E:", "DATA", "example.csv")
[1] "E:/DATA/example.csv"
还可以使用normalizePath
,将文件路径转换为操作系统的规范格式:
zz <- file.path("E:", "DATA", "example.csv")
normalizePath(zz)
[1] "E:\\DATA\\example.csv"
如果剪贴板上有E:\DATA\example.csv
,则执行以下操作:
example.csv <- scan("clipboard", what = "")
## Read 1 item
example.csv
## [1] "E:\\DATA\\example.csv"
或
在4.0+中,支持以下语法?引号讨论了其他变体
r"{E:\DATA\example.csv}"
编辑:添加了有关normalizePath
的更多信息。
编辑:添加了(4)。我对自定义函数使用了一种稍微不同的方法,该函数采用windows路径并针对R对其进行更正
pathPrep <- function() {
cat("Please enter the path:\\n\\n")
oldstring <- readline()
chartr("\\\\", "/", oldstring)
}
但正如其他人指出的那样,您想要的并不是真正可能的。这里有一个非常丑陋的单行代码,可以在BaseR中实现这一点,而不需要任何包:
setwd(gsub(", ", "", toString(paste0(read.table("clipboard", sep="\\", stringsAsFactors=F)[1,], sep="/"))))
因此,可在其自己的小包装器函数中使用(使用suppressWarnings
以获得安心):
现在您可以运行它了:
#Copy your new folder path to clipboard
> change_wd()
[1] "C:/Users/username1/Documents/New Folder"
回答“我能在R中解析原始字符串而不必双重转义反斜杠吗?”这是一个很好的问题,除了剪贴板的特定用例之外,它还有很多用途
我发现一个似乎提供此功能的软件包:
请参阅“赢定”。
文档中指定的用例正是您刚才提到的用例,但是我还没有调查它是否可以处理更灵活的使用场景。现在,R版本4.0.0就可以了。更多信息,请参阅
范例
我知道这个问题由来已久,但对于最近偶然遇到这个问题的人来说,如果他们想与最新版本的R4.0.0分享这个问题,就可以用原始字符串进行解析。它的语法是r“()”
。请注意,字符串放在括号中
例如:
>r“(C:\Users)”
[1] “C:\\Users”
资料来源:
跳转到部分:用户可见的重大变化。+1因为这几乎就是我在回答中所说的。请注意,normalizePath
即使文件不存在也能工作,在这种情况下会发出警告。虽然我担心在这种情况下你是对的,但我从痛苦的经历中学会了永远不要说在R中任何事情都是不可能的。在这种情况下,唯一的可能性似乎是对一些R源代码进行了相当大的更改。您可以实现类似于Python的原始字符串的东西,但必须调整语法。你可能会破坏东西……另一种可能是某种源过滤器。但我认为,这并不是真的R。我认为是-,它需要在read.table
中使用sep
参数进行一些欺骗,但这绝对是可能的。永远不要说真的不:谢谢@Tyler,也许我应该澄清一下,我也对变通方法感兴趣,所以这是非常有用的;我怀疑默认情况下这是不可能的。@celenius我希望你想要的是可能的,因为我想要它已经有一段时间了。:)但这是我能得到的最接近的(必须能够逆转EnnEnter Read剪贴板并创建一个OP所要求的函数吗?一定要跳转到最近的答案——R 4之前的所有答案都需要不再需要的解决方案:+ 1,@ djq,因为您仍然处于活动状态,考虑接受Caleb Fitzgerald的答案。完成-谢谢你让我知道。谢谢,但是卡莱布·菲茨杰拉德在你之前几个月就给出了这个答案
pathPrep <- function() {
cat("Please enter the path:\\n\\n")
oldstring <- readline()
chartr("\\\\", "/", oldstring)
}
(x <- pathPrep())
C:/Users/Me/Desktop/SomeFolder/example.csv
shell.exec(x) #this piece would work only if
# this file really exists in the
# location specified
setwd(gsub(", ", "", toString(paste0(read.table("clipboard", sep="\\", stringsAsFactors=F)[1,], sep="/"))))
> getwd()
[1] "C:/Users/username1/Documents"
> change_wd=function(){
+ suppressWarnings(setwd(gsub(", ", "", toString(paste0(read.table("clipboard", sep="\\", stringsAsFactors=F)[1,], sep="/")))))
+ getwd()
+ }
#Copy your new folder path to clipboard
> change_wd()
[1] "C:/Users/username1/Documents/New Folder"
r"(c:\Program files\R)"
## "c:\\Program files\\R"