How to escape backslashes in R string

2018-12-31 20:35发布

I'm writing strings to a file using R:

> x1="\\str"
> x2="\\\str"
Error: '\s' is an unrecognized escape in character string starting "\\\s"
> x2="\\\\str"
> write(file='test',c(x1,x2))

When I open the file named test, I see this:

\str
\\str

If I want to get a string containing 5 backslashes, should I write 10 backslashes, like this?

x="\\\\\\\\\\str" 

3条回答
墨雨无痕
2楼-- · 2018-12-31 21:16

Have a read of this section about character vectors.

In essence, it says that when you enter character string literals you enclose them in a pair of quotes (" or '). Inside those quotes, you can create special characters using \ as an escape character.

For example, \n denotes new line or \" can be used to enter a " without R thinking it's the end of the string. Since \ is an escape character, you need a way to enter an actual . This is done by using \\. Escaping the escape!

查看更多
步步皆殇っ
3楼-- · 2018-12-31 21:26

Note that the doubling of backslashes is because you are entering the string at the command line and the string is first parsed by the R parser. You can enter strings in different ways, some of which don't need the doubling. For example:

> tmp <- scan(what='')
1: \\\\\str
2: 
Read 1 item
> print(tmp)
[1] "\\\\\\\\\\str"
> cat(tmp, '\n')
\\\\\str 
> 
查看更多
回忆,回不去的记忆
4楼-- · 2018-12-31 21:30

[...] If I want to get a string containing 5 \ ,should i write 10 \ [...]

Yes, you should. To write a single \ in a string, you write it as "\\".

This is because the \ is a special character, reserved to escape the character that follows it. (Perhaps you recognize \n as newline.) It's also useful if you want to write a string containing a single ". You write it as "\"".

The reason why \\\str is invalid, is because it's interpreted as \\ (which corresponds to a single \) followed by \s, which is not valid, since "escaped s" has no meaning.

查看更多
登录 后发表回答