如何将 chr 变量传递给 r"(...)"?

How to pass a chr variable into r"(...)"?

我看到自 4.0.0 以来,R 支持使用语法 r"(...)" 的原始字符串。因此,我可以这样做:

r"(C:\THIS\IS\MY\PATH\TO\FILE.CSV)"
#> [1] "C:\THIS\IS\MY\PATH\TO\FILE.CSV"

虽然这很棒,但我不知道如何使用变量或更好的函数来实现它。请参阅 this comment,我认为它在问同样的问题。

这个连评价都不能:

construct_path <- function(my_path) {
  r"my_path"
}

Error: malformed raw string literal at line 2
}
Error: unexpected '}' in "}"

也不是这个尝试:

construct_path_2 <- function(my_path) {
  paste0(r, my_path)
}

construct_path_2("(C:\THIS\IS\MY\PATH\TO\FILE.CSV)")

Error: '\T' is an unrecognized escape in character string starting ""(C:\T"


期望输出

# pseudo-code
my_path <- "C:\THIS\IS\MY\PATH\TO\FILE.CSV"
construct_path(path)

#> [1] "C:\THIS\IS\MY\PATH\TO\FILE.CSV"

编辑


鉴于@KU99's comment,我想为问题添加上下文。我正在使用 WIndows 的 CMD 和 Rscript 从命令行编写一个 R 脚本 运行。我想让执行我的 R 脚本的用户在他们希望将脚本输出写入的位置提供一个参数。由于 Windows 的 CMD 接受格式为 C:\THIS\IS\MY\PATH\TO 的路径,因此我希望与该格式一致作为我的 R 脚本的输入。所以最终我想采用该路径输入并将其转换为易于在 R 内部使用的路径格式。我认为 r"()" 可能是一个合适的解决方案。

我认为您对字符串文字语法的作用感到困惑。它只是说“不要试图转义以下任何字符”。对于文本输入或文件等外部输入,none 很重要。

例如,如果您 运行 此代码

path <- readline("> enter path: ")

你会得到这个提示:

> enter path:

如果您输入您的(未转义的)路径:

> enter path: C:\Windows\Dir

您没有收到任何错误,并且您的变量已正确存储:

path
#> [1] "C:\Windows\Dir"

这不是 R 使用的任何特殊格式,它是纯文本。反斜杠以这种方式打印以避免歧义,但它们“实际上”只是单个反斜杠,正如您通过

看到的那样
cat(path)
#> C:\Windows\Dir

字符串文字语法仅对缩短您需要键入的内容有用。试图让它做任何其他事情是没有意义的,我们需要记住它是 R 解释器 的一个特性 - 它 不是一个函数 也没有任何方法可以让 R 以您尝试的方式动态使用字符串文字语法。就算可以,走捷径也是路漫漫其修远兮