如何在R字符串中转义反斜杠

21

我正在编写包含反斜杠 (\) 的字符串到文件中:

x1 = "\\str"

x2 = "\\\str"
# Error: '\s' is an unrecognized escape in character string starting "\\\s"

x2="\\\\str"
write(file = 'test', c(x1, x2))

当我打开名为test的文件时,我看到这个:

\str
\\str

如果我想要一个包含5个反斜杠的字符串,我应该像这样写10个反斜杠吗?

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

2
R 4.0.0 开始支持原始字符串。请参见 在 R 中转义反斜杠 () 的字符串或路径 - Henrik
3个回答

22

[...] 如果我想要一个包含5个\的字符串,我应该写10个\吗? [...]

是的,你应该这么写。为了在字符串中写入单个的\,你需要将其写为"\\"

这是因为\是一个特殊字符,用于转义它后面的字符(也许你认识\n表示换行)。它还可以提供帮助,如果你想要写一个包含单个"的字符串。你需要将其写为"\""

之所以\\\str是无效的,是因为它被解释为\\(对应一个\)后面跟着\s,而"转义后的s"没有意义。


8
Python的“原始字符串”(raw strings)在中文中没有等效的说法,例如:r'allows\unescaped\backslashes' - Nate Anderson
3
是的,从 R 4.0.0 版本开始支持原始字符串。例如,请参考 在 R 中转义反斜杠 () 用于字符串或路径 - Henrik

8
请阅读关于字符向量的这一部分内容。
实质上,它说当你输入字符字符串时,需要将它们用一对引号(“或')括起来。在这些引号内,可以使用\作为转义字符来创建特殊字符。
例如,\n表示换行或\"可用于输入 " 而不让R认为它是字符串的结尾。由于\是转义字符,你需要一种方法来输入一个实际的\。这可以通过使用\\来完成。转义转义!

6

请注意双反斜杠的用法是因为您在命令行输入字符串时,该字符串首先会被R解析器解析。您可以以不同的方式输入字符串,其中一些方式不需要使用双反斜杠。例如:

> tmp <- scan(what='')
1: \\\\\str
2: 
Read 1 item
> print(tmp)
[1] "\\\\\\\\\\str"
> cat(tmp, '\n')
\\\\\str 
> 

这在 R 4.x 中不再发生。 - Carl Witthoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接