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

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构建正确的文件路径,而不

在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
构建正确的文件路径,而不依赖于操作系统

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"