【问题标题】:Is there a way to make R strings verbatim (not escaped)?有没有办法逐字制作R字符串(不转义)?
【发布时间】:2016-10-27 09:36:45
【问题描述】:

典型示例:

path <- "C:/test/path" # great
path <- "C:\\test\\path" # also great
path <- "C:\test\path"

错误:'\p' 是从 ""C:\test\p" 开始的字符串中无法识别的转义

(当然 - \t 实际上是一个转义字符。)

是否有任何标记可用于逐字处理字符串?或者可以编码吗?

在 Windows 中复制/粘贴路径名时非常有用...

【问题讨论】:

  • 可能和this Question一样
  • 有没有办法防止 R 字符串将反斜杠视为转义字符的开头? (在我的用例中,我需要防止文件读取和打印显示错误,因为文本中有一个反斜杠后跟一些字符)

标签: r character literals


【解决方案1】:
【解决方案2】:

您可以使用扫描(但只能在交互式会话中使用——而不是在源代码中)

喜欢

path=scan(what="",allowEscapes=F,nlines=1)
C:\test\path
print(path)

然后 Ctrl+A ++ Ctrl+回车
给你结果

但不适用于功能或来源:

{
path=scan(what="character",allowEscapes=F,nlines=1)
C:\test\path
print(path)
}

抛出错误

【讨论】:

    【解决方案3】:

    可能是readline()scan(what = "charactor"),两者都在终端中工作,而不是脚本或函数

    1.readline():

    > path <- readline()
    C:\test\path #paste your path, ENTER
    > path
    [1] "C:\\test\\path"
    

    2.scan(what = "charactor"):

    > path = scan(what = "character")
    1: C:\test\path #paste, ENTER
    2: #ENTER
    #Read 1 item
    > path
    [1] "C:\\test\\path"
    

    编辑:

    试试这个:

    1.定义一个函数getWindowsPath()

    > getWindowsPath <- function() #define function 
      {
        return(scan(file = "clipboard", what = "character"))
      }
    

    2.使用CTRL+C复制windows path

    #CTRL+C: C:\test\path  
    > getWindowsPath()
    #Read 1 item
    [1] "C:\\test\\path"
    

    【讨论】:

      【解决方案4】:

      如果您在 Windows 中进行复制和粘贴,您可以设置到剪贴板的文件连接。然后你可以使用scan 读取它,关闭allowEscapes。但是,Windows 允许文件路径中有空格,而 scan 不理解这一点,因此您必须将结果包装在 paste0 中,并将 collapse 设置为长度为 0 的字符串。

      x = file(description = "clipboard")
      y = paste0(scan(file = x, what = "character", allowEscapes = F), collapse = "")
      

      不幸的是,这仅适用于剪贴板中当前的路径,因此如果您将大量路径复制并粘贴到 R 脚本中,这不是解决方案。在这种情况下,一种解决方法是将每个路径粘贴到单独的文本文件中并保存。然后,在您的主脚本中,您可以运行以下命令

      y = paste0(scan(file = "path1.txt", what = "character", allowEscapes = F), collapse = "")
      

      您可能需要为每个路径保存一个文件。

      【讨论】:

        猜你喜欢
        • 2019-03-19
        • 2022-11-29
        • 1970-01-01
        • 2019-08-19
        • 2021-02-28
        • 2011-06-27
        • 2019-12-16
        • 1970-01-01
        • 2021-04-04
        相关资源
        最近更新 更多