有没有办法让 R 字符串逐字(不转义)?
Is there a way to make R strings verbatim (not escaped)?
典型例子:
path <- "C:/test/path" # great
path <- "C:\test\path" # also great
path <- "C:\test\path"
错误:'\p' 是字符串中无法识别的转义符,以“"C:\test\p"
开头
(当然 - \t 实际上是一个转义字符。)
是否有任何标记可以将字符串视为逐字处理?还是可以打码?
当 copy/pasting 路径名在 Windows...
中时,它会非常有用
您可以使用扫描(但只能在交互式会话中——不能在源代码中使用)
喜欢
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)
}
抛出错误
可能 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.Define 函数 getWindowsPath()
:
> getWindowsPath <- function() #define function
{
return(scan(file = "clipboard", what = "character"))
}
2.Copy windows path
使用 CTRL+C:
#CTRL+C: C:\test\path
> getWindowsPath()
#Read 1 item
[1] "C:\test\path"
如果您在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 = "")
您可能需要为每个路径保存一个文件。
R 4.0.0 引入原始字符串:
dir <- r"(c:\Program files\R)"
https://stat.ethz.ch/R-manual/R-devel/library/base/html/Quotes.html
https://blog.revolutionanalytics.com/2020/04/r-400-is-released.html
典型例子:
path <- "C:/test/path" # great
path <- "C:\test\path" # also great
path <- "C:\test\path"
错误:'\p' 是字符串中无法识别的转义符,以“"C:\test\p"
开头(当然 - \t 实际上是一个转义字符。)
是否有任何标记可以将字符串视为逐字处理?还是可以打码?
当 copy/pasting 路径名在 Windows...
中时,它会非常有用您可以使用扫描(但只能在交互式会话中——不能在源代码中使用)
喜欢
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)
}
抛出错误
可能 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.Define 函数 getWindowsPath()
:
> getWindowsPath <- function() #define function
{
return(scan(file = "clipboard", what = "character"))
}
2.Copy windows path
使用 CTRL+C:
#CTRL+C: C:\test\path
> getWindowsPath()
#Read 1 item
[1] "C:\test\path"
如果您在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 = "")
您可能需要为每个路径保存一个文件。
R 4.0.0 引入原始字符串:
dir <- r"(c:\Program files\R)"
https://stat.ethz.ch/R-manual/R-devel/library/base/html/Quotes.html
https://blog.revolutionanalytics.com/2020/04/r-400-is-released.html