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