我已经在堆栈溢出中读到了关于这个主题的一些问题和答案,但仍然不知道如何解决这个问题:
我的目的是将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 回答
当你需要在R中的字符串中使用反斜杠时,需要加上双反斜杠 . 此外,当您使用
gsub("\\", "/", str)
时,第一个参数被解析为正则表达式,并且它无效,因为它只包含必须转义的单个字面反斜杠 . 实际上,您需要将gsub
视为带有fixed=TRUE
的纯文本 .但是,您可能希望使用normalizePath,请参阅this SO thread .
我不确定你打算如何让用户输入GUI的路径,但是当使用readline()然后键入C:\ Users \ Public unquoted时,R会将其读入:
然后我们想用“/”替换“\”,但为了逃避“\”,我们需要在gsub中使用“\\” .
我不能确定用户的输入将如何在GUI中读入R,但R很可能会像使用readline示例时那样在字符串中转义\ s . 您尝试创建的字符串“C:\ Users \ Public”通常不会发生 .