如何将 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 以您尝试的方式动态使用字符串文字语法。就算可以,走捷径也是路漫漫其修远兮
我看到自 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 以您尝试的方式动态使用字符串文字语法。就算可以,走捷径也是路漫漫其修远兮