【问题标题】:Escaping backslash (\) in string or paths in R在 R 中的字符串或路径中转义反斜杠 (\)
【发布时间】:2012-12-20 13:16:12
【问题描述】:

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

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

然后使用chartr0 作为...

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

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

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

【问题讨论】:

  • gsubsub 可能会让你到达那里。
  • 或者只使用正斜杠...
  • 正如 Dirk 所说,原因是正斜杠不需要“转义”。
  • 你可以使用 file.path("E:","Rstuf","test.r").
  • 这里有一个有趣的解决windows斜线问题的方法:stackoverflow.com/a/12703931/1700987

标签: r file-io directory path escaping


【解决方案1】:

R 4.0.0可以用r"(...)"写一个路径为raw string constant,这样就不用转义了:

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

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

【讨论】:

    【解决方案2】:
    chartr0 <- function(foo) chartr('\\','/',foo)
    chartr0('E:\\RStuff\\test.r')
    

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

    【讨论】:

    • 这也可以:chartr0 &lt;- function(foo) chartr('\\','/',foo)
    【解决方案3】:

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

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

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

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

     ?Quotes
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 确实没有正确输入反斜杠,但我不明白正斜杠转义错误的说法。
      • chartr('\','\\/',foo) 中,'\\/' 似乎是试图用转义的反斜杠转义正斜杠。也许这是一个不正确的假设,但无论如何'\\/' 显然是chartr 的错误输入。
      • 不是 '\\/' 导致错误,而是 '\',' 序列。
      猜你喜欢
      • 2012-08-02
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2014-12-04
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多