是否有可能R中指定文件路径字符串时忽略转义字符使用前缀?
例如,如果我想使用Windows,在文件example.csv
阅读,我需要手动更改\
到/
或\\
。例如,
'E:\DATA\example.csv'
变
'E:/DATA/example.csv'
data <- read.csv('E:/DATA/example.csv')
在python
我可以用r
避免这样做(例如r'E:\DATA\example.csv'
)前缀我的字符串。是否有一个类似的命令R
,或者说我可以用它来避免这个问题的方法。 (我之间的Windows,Mac和Linux的移动 - 这仅仅是在Windows操作系统上的问题很明显)。
您可以使用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"
但是,在你的问题直接回应:我不知道的办法忽略使用R.换句话说转义序列,我不相信这是可能从Windows复制文件路径,并直接粘贴到R.
但是,如果你真的什么后从Windows剪贴板复制和粘贴的方式,并得到有效的[R字符串,尝试readClipboard
例如,如果我从Windows资源管理器中复制文件路径,然后运行下面的代码,我得到一个有效的文件路径:
zz <- readClipboard()
zz
[1] "C:\\Users\\Andrie\\R\\win-library\\"
1)如果E:\DATA\example.csv
在剪贴板,然后做到这一点:
example.csv <- scan("clipboard", what = "")
## Read 1 item
example.csv
## [1] "E:\\DATA\\example.csv"
现在,你可以从上面的上面的输出复制"E:\\DATA\\example.csv"
到剪贴板,然后粘贴到你的源代码,如果你需要硬代码路径。
类似的情况也适用,如果E:\DATA\example.csv
是在一个文件中。
2)如果该文件存在,那么另一件事是尝试:
example.csv <- file.choose()
然后导航到它并且继续如在上述1)(除file.choose
线替换scan
语句那里)。
3)请注意,它不是真实的,你需要改变反斜杠转发在Windows上read.csv
斜杠,但如果由于某种原因,你真正需要做的翻译,那么,如果该文件存在,那么这将转化反斜杠斜杠(但如果它不存在,那么它会给出一个恼人的警告,所以你可能需要使用下面的其他方法)中的一种:
normalizePath(example.csv, winslash = "/")
这些翻译反斜杠转发,即使该文件不存在斜线:
gsub("\\", "/", example.csv, fixed = TRUE)
## [1] "E:/DATA/example.csv"
要么
chartr("\\", "/", example.csv)
## [1] "E:/DATA/example.csv"
编辑:添加normalizePath
更多信息。
稍有不同的方法,我用一个定制的功能,需要使用带有Windows路径并纠正它为R.
pathPrep <- function() {
cat("Please enter the path:\\n\\n")
oldstring <- readline()
chartr("\\\\", "/", oldstring)
}
让我们来试试吧!
当提示粘贴路径进入控制台或使用Ctrl + R键上的一切一次
(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
但正如有人指出,你要的是不是真正的可能。
不,这是不可能的。抱歉。
这里是一个令人难以置信的丑陋单行黑客在基础R要做到这一点,没有必要包:
setwd(gsub(", ", "", toString(paste0(read.table("clipboard", sep="\\", stringsAsFactors=F)[1,], sep="/"))))
可用在自己的小包装函数这样(使用suppressWarnings
安心):
> 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中原始的字符串,而无需双反斜线逃逸?”这是一个很好的问题,有很多的用途,除了具体使用情况与剪贴板。
我发现,似乎提供此功能的包:
https://github.com/trinker/pathr
请参阅 “win_fix”。在文档中规定的使用情况正是你刚才所说的用例,但我还没有调查是否它处理更灵活的使用场景呢。