Escaping backslash (\) in string or paths in R

Windows copies path with backslash \, 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 it possible to avoid the use chartr0 every time, but convert all path automatically by creating an environment in R which calls chartr0 or use some kind of temporary use like using options


Solution 1:

From R 4.0.0 you can use r"(...)" to write a path as raw string constant, which avoids the need for escaping:

r"(E:\RStuff\test.r)"
# [1] "E:\\RStuff\\test.r"

There is a new syntax for specifying raw character constants similar to the one used in C++: r"(...)" with ... any character sequence not containing the sequence )". This makes it easier to write strings that contain backslashes or both single and double quotes. For more details see ?Quotes.

Solution 2:

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