首页 文章

在R中替换单个反斜杠

提问于
浏览
5

我已经在堆栈溢出中读到了关于这个主题的一些问题和答案,但仍然不知道如何解决这个问题:

我的目的是将Windows资源管理器中的文件目录字符串转换为R中可识别的格式,例如C:\ Users \ Public需要转换为C:/ Users / Public,基本上单斜杠应该用正斜杠代替 . 但是R无法存储原始字符串“C:\ Users \ Public”,因为\ U和\ P被认为是转义字符 .

dirTransformer <- function(str){
   str.trns <- gsub("\\", "/", str)
   return(str.trns)
   }

str <- "C:\Users\Public"
dirTransformer(str)

> Error: '\U' used without hex digits in character string starting ""C:\U"

我实际编写的是GUI,最终效果是,用户将目录键入或粘贴到输入字段中,按下按钮然后程序将自动处理它 .

有人请建议我如何解决这个问题?

2 回答

  • 3

    当你需要在R中的字符串中使用反斜杠时,需要加上双反斜杠 . 此外,当您使用 gsub("\\", "/", str) 时,第一个参数被解析为正则表达式,并且它无效,因为它只包含必须转义的单个字面反斜杠 . 实际上,您需要将 gsub 视为带有 fixed=TRUE 的纯文本 .

    但是,您可能希望使用normalizePath,请参阅this SO thread .

  • 1
    dirTransformer <- function(str){
      str.trns <- gsub("\\\\", "/", str)
      return(str.trns)
    }
    
    str <- readline()
    C:\Users\Public
    
    dirTransformer(str)
    

    我不确定你打算如何让用户输入GUI的路径,但是当使用readline()然后键入C:\ Users \ Public unquoted时,R会将其读入:

    > str
    [1] "C:\\Users\\Public"
    

    然后我们想用“/”替换“\”,但为了逃避“\”,我们需要在gsub中使用“\\” .

    我不能确定用户的输入将如何在GUI中读入R,但R很可能会像使用readline示例时那样在字符串中转义\ s . 您尝试创建的字符串“C:\ Users \ Public”通常不会发生 .

相关问题