【问题标题】:How to escape backslashes in R string如何在 R 字符串中转义反斜杠
【发布时间】:2012-08-02 03:19:23
【问题描述】:
我正在将包含反斜杠 (\) 的字符串写入文件:
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"
【问题讨论】:
标签:
r
file-io
escaping
backslash
【解决方案1】:
[...] 如果我想得到一个包含 5 \ 的字符串,我应该写 10 \ [...]
是的,你应该这样做。要在字符串中写入单个\,请将其写为"\\"。
这是因为\ 是一个特殊字符,保留给它后面的字符转义。 (也许您将\n 识别为换行符。)如果您想编写一个包含单个" 的字符串,它也很有用。你写成"\""。
\\\str之所以无效,是因为它被解释为\\(对应单个\)后跟\s,这是无效的,因为“转义的s”没有意思。
【解决方案2】:
阅读 this section 关于字符向量的内容。
本质上,它表示当您输入字符串文字时,会将它们括在一对引号(" 或 ')中。在这些引号内,您可以使用 \ 作为转义字符来创建特殊字符。
例如,\n 表示换行或 \" 可用于输入 ",而 R 不会认为它是字符串的结尾。由于 \ 是转义字符,因此您需要一种方法来输入实际的 .这是通过使用 \\.逃跑!
【解决方案3】:
请注意,反斜杠加倍是因为您在命令行输入字符串,并且该字符串首先由 R 解析器解析。您可以以不同的方式输入字符串,其中一些不需要加倍。例如:
> tmp <- scan(what='')
1: \\\\\str
2:
Read 1 item
> print(tmp)
[1] "\\\\\\\\\\str"
> cat(tmp, '\n')
\\\\\str
>