繁体   English   中英

在 R 中的字符串或路径中转义反斜杠 (\\)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM