在R中有效地将反斜杠转换为正斜杠

问题描述 投票:40回答:9

我正在寻找一种有效的方法来将反斜杠转换为R中的正斜杠。有时我从windows复制目录的链接,我得到这样的东西:

C:\Users\jd\Documents\folder\file.txt

我怎样才能快速将其更改为C:/Users/jd/Documents/folder/file.txt?我甚至不能将上面的表达作为字符阅读。它抛出一个错误

“\ u在字符串开头没有十六进制数字时使用”“C:\ u”。

我知道R中的TAB功能有助于快速找到位置,但只是想知道是否还有其他工作。我也可以将工作目录更改为文件夹的位置。我只是在玩耍并试图将反斜杠转换为正斜杠并且不是直截了当所以因为好奇而问这个。

r escaping filepath
9个回答
43
投票

在R中,你要用\逃离\\所以,你的道路应该是:

x <- "C:\\Users\\jd\\Documents\\folder\\file.txt"

为此,您可以:

x <- readline()

然后,在提示符下,粘贴未修改的路径(CTRL + V然后按ENTER键)

最后,要将\\改为/无处不在,你可以再次使用gsub逃离\,但两次,如下:

gsub("\\\\", "/", x)
# [1] "C:/Users/jd/Documents/folder/file.txt"

23
投票

如果您希望在粘贴路径时使用最少的击键次数来转换反斜杠,请使用如下定义的RStudio snippet

snippet pp
    "`r gsub('"', "", gsub("\\\\", "/", readClipboard()))`"

请记住在第二行前面加上一个标签,而不是多个空格以使代码段起作用。

然后键入pp,TAB,ENTER并粘贴剪贴板上的文本,用正斜杠替换反斜杠并用引号括起来。

以下是在定义上述代码段后,我通常采取的将文件路径复制到RStudio的步骤:

  1. 导航到资源管理器中的文件路径。
  2. 如果复制文件路径,则:Shift +右键单击文件,然后单击“复制为路径”。
  3. 如果复制文件夹路径,则:Alt + d,Ctrl + c。
  4. 将窗口更改为RStudio,并将焦点放在要粘贴路径的R脚本中。
  5. pp,TAB,ENTER粘贴到RStudio并将反斜杠转换为正斜杠。

11
投票

如果我理解正确,你确实想摆脱字符串编辑。为了能够使用gsub,您必须首先手动将所有\更改为\\。那么,为什么不首先将\改为/

如果剪贴板中有字符串,则可以使用

  x=scan("clipboard",what="string")

这给了

  "C:\\Users\\jd\\Documents\\folder\\file.txt"

也就是说,它会自动将所有\转换为\\。我知道 - 不是很方便,但我知道绕过编辑的唯一方法。


8
投票

我使用Path Copy Copy,它是Windows的一个插件,允许您在Windows中右键单击文件/文件夹时创建自定义复制命令。所以我的右键菜单有“复制带有正斜杠的完整路径”作为选项,它使用正斜杠复制文件/文件夹。我猜它每年都会节省我从手动更改斜线到R格式的日子。


7
投票

自动计划程序:

^+v::
StringReplace, clipboard, clipboard, \,/,All
send %clipboard%

在控制+ c文件路径后,使用control + shift + v进行粘贴


6
投票

这是从剪贴板转换地址的一步法

x  <- gsub  ( "\\\\",  "/",  readClipboard ()  ) 

6
投票

我喜欢使用具有snippetsaddin功能的RStudio插件'Convert slash'

它将反转所选代码块中的所有斜杠,或者如果没有选择(或只选择空格),它将反转剪贴板中的所有斜杠并将其粘贴到当前光标位置( S)。

Add Ins像包一样安装。要安装此功能,请执行以下操作:

devtools::install_github("sfr/RStudio-Addin-Snippets", type = "source")

1
投票

没有片段定义的解决方案是

writeClipboard(gsub("\\\\", "/", readClipboard()))

0
投票

我认为摆脱麻烦的最好方法是在右侧面板中找到Rstudio中的文件。然后单击“更多”并单击“设置为工作目录”。然后你会在控制台中看到“setwd(...)”。您可以将其复制到您的代码中。

© www.soinside.com 2019 - 2024. All rights reserved.