Escaping \ in string or paths in R

白昼怎懂夜的黑 提交于 2019-12-01 19:47:48

问题


Windows copies path with \ which R does not accept. So, I wanted to write a function which would convert '\' to '/'. For example:

chartr0 <- function(foo) chartr('\','\\/',foo)

Then use chartr0 as...

source(chartr0('E:\RStuff\test.r'))

But chartr0 is not working. I guess, I am unable to escape '/'. I guess escaping / may be important in many other occasions.

Also, is there a way in R such that I do not have to use chartr0every time but convert all path automatically by creating an environemnt in R which calls chartr0 or use some kind of temporary use like using options


回答1:


Your fundamental problem is that R will signal an error condition as soon as it sees a single back-slash before any character other than a few lower-case letters, backslashes themselves, quotes or some conventions for entering octal, hex or Unicode sequences. That is because the interpreter sees the back-slash as a message to "escape" the usual translation of characters and do something else. If you want a single back-slash in your character element you need to type 2 backslashes. That will create one backslash:

nchar("\\")
#[1] 1

The "Character vectors" section of _Intro_to_R_ says:

"Character strings are entered using either matching double (") or single (') quotes, but are printed using double quotes (or sometimes without quotes). They use C-style escape sequences, using \ as the escape character, so \ is entered and printed as \, and inside double quotes " is entered as \". Other useful escape sequences are \n, newline, \t, tab and \b, backspace—see ?Quotes for a full list."

 ?Quotes



回答2:


chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')

You cannot write E:\Rxxxx, because R believes R is escaped.




回答3:


The problem is that every single forward slash and backslash in your code is escaped incorrectly, resulting in either an invalid string or the wrong string being used. You need to read up on which characters need to be escaped and how. Take a look at the list of escape sequences in the link below. Anything not listed there (such as the forward slash) is treated literally and does not require any escaping.

http://cran.r-project.org/doc/manuals/R-lang.html#Literal-constants



来源:https://stackoverflow.com/questions/14185287/escaping-in-string-or-paths-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!