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

Sta*_*t-R 4 r escaping

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

chartr0 <- function(foo) chartr('\','\\/',foo)
Run Code Online (Sandbox Code Playgroud)

然后使用chartr0...

source(chartr0('E:\RStuff\test.r'))
Run Code Online (Sandbox Code Playgroud)

但是chartr0没有用.我猜,我无法逃脱'/'.我想逃避/在许多其他场合可能很重要.

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

Hen*_*rik 12

R 4.0.0 开始,您可以使用r"(...)"将路径写为原始字符串常量,从而避免转义:

r"(E:\RStuff\test.r)"
# [1] "E:\\RStuff\\test.r"
Run Code Online (Sandbox Code Playgroud)

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


42-*_*42- 6

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

nchar("\\")
#[1] 1
Run Code Online (Sandbox Code Playgroud)

_Intro_to_R_的"字符向量"部分说:

"使用匹配的双(")或单引号输入字符串,但使用双引号(或有时不带引号)打印.它们使用C风格的转义序列,使用\作为转义字符,因此\输入并打印为\,并在双引号内输入"\".其他有用的转义序列是\n,换行符,\ t,制表符和\ b,退格键 - 请参阅?完整列表的行情."

 ?Quotes
Run Code Online (Sandbox Code Playgroud)