在R中的字符串或路径中转义\

时间:2013-01-06 18:24:42

标签: r escaping

Windows复制路径\,R不接受。所以,我想编写一个将'\'转换为'/'的函数。例如:

chartr0 <- function(foo) chartr('\','\\/',foo)

然后使用chartr0作为...

source(chartr0('E:\RStuff\test.r'))

chartr0无效。我猜,我无法逃脱'/'。我想在许多其他场合逃避/可能很重要。

此外,在R中是否有一种方法,我不必每次都使用chartr0,而是通过在R中创建一个调用chartr0的environemnt或使用某种临时来自动转换所有路径像使用options

一样使用

4 个答案:

答案 0 :(得分:6)

你的根本问题是,只要在除了几个小写字母,反斜杠本身,引号或用于输入八进制,十六进制或Unicode的某些约定之外的任何字符之前看到单个反斜杠时R将发出错误信号。序列。这是因为解释器将反斜杠视为一条消息,以“逃避”通常的字符翻译并执行其他操作。如果要在角色元素中使用单个反斜杠,则需要键入2个反斜杠。这将产生一个反斜杠:

nchar("\\")
#[1] 1

_Intro_to_R_的“字符向量”部分说:

“使用匹配的double(”)或single(')引号输入字符串,但使用双引号(或有时不带引号)打印。它们使用C风格的转义序列,使用\作为转义字符,因此\输入并打印为\,而双引号内输入为“\”。其他有用的转义序列是\ n,换行符,\ t,制表符和\ b,退格键 - 请参阅?报价以获取完整列表。“

 ?Quotes

答案 1 :(得分:6)

R 4.0.0中,您可以使用r"(...)"将路径写为raw string constant,从而避免了转义:

r"(E:\RStuff\test.r)"
# [1] "E:\\RStuff\\test.r"

有一种新的语法可用于指定原始字符常量,类似于C ++中使用的原始常量:r"(...)"...包含不包含序列)"的任何字符序列。这样,更容易编写包含反斜杠的字符串或单引号和双引号。有关更多详细信息,请参见?Quotes

答案 2 :(得分:1)

chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')

你不能写E:\ Rxxxx,因为R认为R是逃脱的。

答案 3 :(得分:0)

问题是代码中的每个正斜杠和反斜杠都被错误地转义,导致使用无效字符串或使用错误的字符串。您需要了解需要转义哪些字符以及如何转义。请查看以下链接中的转义序列列表。任何未列在那里的东西(例如正斜杠)都是按字面处理的,不需要任何转义。

http://cran.r-project.org/doc/manuals/R-lang.html#Literal-constants