5

在我早期的 R 生活中,当涉及到目录和子目录之间的分隔符时,我发现了 R 和 windows 在不同页面上的痛苦。尽管我知道这个问题,但我仍然很痛苦,因为我必须手动在所有反斜杠前面加上一个反斜杠,或者用正斜杠替换所有反斜杠。

我喜欢使用我在计算机上运行的多个应用程序中的任何一个(例如 XYPlorer、voidtools 的一切)复制路径名或整个文件名,然后将其粘贴到 Tinn-R 中。无论如何,我可以自动执行我目前正在手动执行的任务。

  • Tinn-R有设定吗?
  • R中有设置吗?
  • 是否有一个自动热键脚本可以默认为我做这件事?

不知道我在说什么的人的背景

引用 R for Windows FAQ、R-2.9.2 版本、BD Ripley 和 DJ Murdoch

R 字符串中的反斜杠必须加倍,例如需要 `"d:\R-2.9.2\library\xgobi\scripts\xgobi.bat"'。您可以通过使用正斜杠作为路径分隔符让自己的生活更轻松:它们在 Windows 下工作

4

9 回答 9

7

我编写了一个通过键入“ rfil ”触发的自动热键脚本 - 没有引号。

:O:rfil:: ;replaces backslashes with forward slashes in a file name that is stored on the clipboard
StringReplace,clipboard,clipboard,\,/,All
send %clipboard%
return

如果有人能告诉我比使用发送命令更快的方法,我将不胜感激。我有一个自动热键脚本一直在我的所有计算机上运行,​​所以我不必下载新软件来运行这个脚本。我只是将它添加到我的默认脚本文件中。

如果你愿意,我很乐意解释我做了什么。

于 2009-09-16T21:41:24.817 回答
2

ClipPath添加了右键单击菜单选项来选择要粘贴的斜线类型。

通过Getting Genetics Done,这看起来对 R 用户来说可能是一个有用的资源。

于 2009-09-14T19:33:28.810 回答
2

每当我在 RStudio 中粘贴任何内容时,我已经调整了以下共享的自动热键代码以用正斜杠替换所有反斜杠。这种方法有利有弊。

优点:你不必考虑它。只有当活动窗口是 RStudio 时,代码才会运行。

缺点:每次您在 R 中粘贴某些内容时,都会调用该代码。每次它尝试查找反斜杠并用正斜杠替换它们时。

GroupAdd, R, RStudio

;replaces backslashes with forward slashes in a file name that is stored on the clipboard
#IfWinActive ahk_group R
   ^v::
      StringReplace,clipboard,clipboard,\,/,All
      send %clipboard%
   return
#IfWinActive
于 2016-02-12T16:42:17.133 回答
1

我使用搜索和替换,但当然,它不是完全自动的,您必须注意不要替换“\t”或“\n”。

于 2009-09-10T19:41:02.923 回答
1

不完全是您正在寻找的答案,但 R 具有我经常使用的自己的 shell 脚本功能:

list.files(,full=TRUE) [返回带有适当分隔符的完整路径]

file.path() [加入操作系统特定的分隔符]

等等...

于 2009-09-10T19:47:40.627 回答
1

您可以围绕所有路径名创建一个包装函数:

> replace.slash <- function(path.name) gsub("\\\\","/",path.name)
> path.name <- "c:\\tmp\\"
> replace.slash(path.name)
[1] "c:/tmp/"

[编辑]:谢谢哈德利。我在那里纠正了错误。

顺便说一句,我发现这个关于这个主题的讨论非常有用

于 2009-09-10T20:45:11.577 回答
1

这是执行相同操作的AutoIt\代码(替换为/)。

Local $text1 = ClipGet()
$text2=StringReplace($text1,"\","/")
ClipPut($text2)
于 2012-12-06T14:30:36.607 回答
0

为什么不创建一个检查操作系统并返回正确文件分隔符的函数(我相信 java 解决方案)?

file_sep <- function(){
ifelse(.Platform$OS.type == "unix", "/", "//")
}
file_sep()

如果你愿意,你可以选择一个更短的名字。这里最大的缺陷是您必须将文件路径粘贴在一起,但如果您正在从事大型项目,那么长期这样做仍然值得。

于 2009-09-11T17:41:46.033 回答
0

稍微扩展@Farrel 的代码(非常感谢!),这是我的 AutoHotkey 脚本,它将获取我选择的任何文件的完整文件路径,然后(如果需要)交换斜杠以便在 R 中更好地使用。

该脚本还将任何映射的驱动器替换为完整的网络路径。要使用它,您需要编辑此脚本以查找您的特定映射驱动器,然后将这些驱动器号替换为完整路径。

设置需要一些时间,但它非常有用。我每天都用这个。

;If Windows explorer is active...
#IfWinActive ahk_class CabinetWClass 

; ALT + F - Get the filepath to the file
!f::
SendInput, ^c
Sleep 100
Clipboard := Clipboard
return

;Check for and replace mapped drive names on the clipboard with full file paths
If InStr(Clipboard,"X:\",1) {
Clipboard := "\\SERVER_NAME\g$\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"K:\",1) {
Clipboard := "\\SERVER_NAME\Data\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"Q:\",1) {
Clipboard := "\\SERVER_NAME\Data\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} else if InStr(Clipboard,"L:\",1) {
Clipboard := "\\SERVER_NAME\" SubStr(Clipboard,4, (StrLen(Clipboard )))
} 
Return

; ALT + S - Replaces backslashes with forward slashes (helpful for R)
; Source: https://stackoverflow.com/questions/1407238/relief-from-backslash-irritation-in-r-for-windows
!s::
StringReplace,clipboard,clipboard,\,/,All
send %clipboard%
return

; Scripts below this point will run in any active window
#IfWinActive
于 2019-07-19T14:30:52.710 回答