原始文本字符串中的R文件路径

问题描述 投票:26回答:6

是否有可能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操作系统上的问题很明显)。

r string
6个回答
38
投票

您可以使用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\\"

7
投票

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更多信息。


4
投票

稍有不同的方法,我用一个定制的功能,需要使用带有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  

但正如有人指出,你要的是不是真正的可能。


3
投票

不,这是不可能的。抱歉。


2
投票

这里是一个令人难以置信的丑陋单行黑客在基础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"

1
投票

要回答的问题实际“我可以分析R中原始的字符串,而无需双反斜线逃逸?”这是一个很好的问题,有很多的用途,除了具体使用情况与剪贴板。

我发现,似乎提供此功能的包:

https://github.com/trinker/pathr

请参阅 “win_fix”。在文档中规定的使用情况正是你刚才所说的用例,但我还没有调查是否它处理更灵活的使用场景呢。

© www.soinside.com 2019 - 2024. All rights reserved.