8

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

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

然后chartr0用作...

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

chartr0不工作。我想,我是逃不掉/的。我想/在许多其他场合逃避可能很重要。

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

4

4 回答 4

16

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

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

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

于 2020-07-24T17:51:30.310 回答
7

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

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

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

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

 ?Quotes
于 2013-01-06T19:01:01.250 回答
3
chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')

你不能写 E:\Rxxxx,因为 R 认为 R 被转义了。

于 2013-01-06T18:32:32.037 回答
0

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

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

于 2013-01-06T18:54:12.673 回答