file io-转义字符串中的反斜杠()或R中的路径



Windows使用反斜杠复制路径,R不接受该反斜杠。所以,我想写一个函数,将转换为/。例如:

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

然后使用chartr0作为…

source(chartr0('E:RStufftest.r'))

chartr0不起作用。我想,我无法逃脱/。我想逃离/在许多其他场合可能很重要。

此外,是否可以避免每次使用chartr0,而是通过在R中创建一个调用chartr0的环境来自动转换所有路径,或者使用某种临时用途,如使用options

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

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

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

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

nchar("\")
#[1] 1

_Intro_R_的"字符矢量"部分说:

"字符串使用匹配的双引号("(或单引号('(输入,但打印时使用双引号(有时不使用引号(。它们使用C风格的转义序列,使用\作为转义符,因此\被输入并打印为\,并且在双引号内"被输入为\"。其他有用的转义序列有\n、换行符、\t、tab和\b、退格符--请参阅?完整列表的报价。">

 ?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-常数

最新更新