![](/img/trans.png)
[英]Escaping a backslash with a backslash in R produces 2 backslashes in a string, not 1
[英]Escaping backslash (\) in string or paths in R
Windows 使用反斜杠\\
复制路径,R 不接受。 所以,我想编写一个将\\
转换为/
的函数。 例如:
chartr0 <- function(foo) chartr('\','\\/',foo)
然后使用chartr0
作为...
source(chartr0('E:\RStuff\test.r'))
但是chartr0
不起作用。 我想,我无法逃脱/
。 我想在许多其他场合逃避/
可能很重要。
此外,是否可以避免每次都使用chartr0
,而是通过在R中创建一个调用chartr0
的环境或使用某种临时使用(如使用options
自动转换所有路径
从R 4.0.0 开始,您可以使用r"(...)"
将路径写为原始字符串常量,从而避免了转义:
r"(E:\RStuff\test.r)"
# [1] "E:\\RStuff\\test.r"
有一种新的语法用于指定类似于 C++ 中使用的原始字符常量的语法:
r"(...)"
with...
任何不包含序列)"
字符序列。这使得编写包含反斜杠的字符串更容易或单引号和双引号。有关更多详细信息,请参阅?Quotes
。
您的基本问题是,R 会在除几个小写字母、反斜线本身、引号或用于输入八进制、十六进制或 Unicode 序列的一些约定之外的任何字符之前看到单个反斜杠时,立即发出错误信号。 那是因为解释器将反斜杠视为“逃避”通常的字符翻译并做其他事情的消息。 如果您想在字符元素中使用单个反斜杠,则需要键入 2 个反斜杠。 这将创建一个反斜杠:
nchar("\\")
#[1] 1
_Intro_to_R_ 的“字符向量”部分说:
"字符字符串使用匹配的双 (") 或单 (') 引号输入,但使用双引号(或有时不带引号)打印。 他们使用 C 风格的转义序列,使用 \\ 作为转义字符,所以 \\ 被输入并打印为 \\,并且在双引号内“被输入为 \\”。 其他有用的转义序列是 \\n、换行符、\\t、制表符和 \\b、退格符——请参阅 ?Quotes 以获取完整列表。”
?Quotes
chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')
你不能写 E:\\Rxxxx,因为 R 认为 R 被转义了。
问题是代码中的每个正斜杠和反斜杠都被错误地转义,导致使用无效字符串或错误字符串。 您需要阅读哪些字符需要转义以及如何转义。 查看以下链接中的转义序列列表。 此处未列出的任何内容(例如正斜杠)均按字面处理,不需要任何转义。
http://cran.r-project.org/doc/manuals/R-lang.html#Literal-constants
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.