Relief from backslash irritation in R for Windows

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

Early in my R life I discovered the pain of R and windows being on different pages when it came to the separator between directories and subdirectories. Eventhough I know about the problem, I am still pained by manually having to put a backslash in front of all my backslashes or replacing all of them with forward slashes.

I love copying a path name or an entire filename with any one of several applications that I have running on my computer (eg. XYPlorer, Everything by voidtools) and then pasting it into Tinn-R. Is there anyway that I could automate the task that I am currently doing manually.

  • Is there a setting in Tinn-R?
  • Is there a setting in R?
  • Is there a autohotkey script that could do it for me by default?

Background for those who don't know what I am talking about

Quoting from R for Windows FAQ, Version for R-2.9.2, B. D. Ripley and D. J. Murdoch

Backslashes have to be doubled in R character strings, so for example one needs `"d:\R-2.9.2\library\xgobi\scripts\xgobi.bat"'. You can make life easier for yourself by using forward slashes as path separators: they do work under Windows

回答1:

I wrote a autohotkey script that is triggered by typing "rfil " - without the inverted commas.

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

If anyone can tell me a quicker way than using the send command I would appreciate it. I have an autohotkey script running all the time on all my computers so I did not have to download new software in order to run this script. I simply added it to my default script file.

I will be happy to explain what I did if you want me to.



回答2:

ClipPath adds right-click menu options to choose which kind of slash you want to paste.

Via Getting Genetics Done, which looks like it could be a useful resource for R users in general.



回答3:

I've adapted the following autohotkey code shared to replace all backslashes with forward slashes whenever I paste anything in RStudio. There are pros and cons to this approach.

Pros: You don't have to think about it. The code will only run if the active window is RStudio.

Cons: The code is called every time you paste something in R. Each time it attempts to find backslashes and replace them with forward slashes.

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 


回答4:

I use search & replace, but of course, it's not completely automatic and you have to take care not to replace "\t" or "\n".



回答5:

Not exactly the answer you're looking for but R has its own shell scripting functions which I often use:

list.files(,full=TRUE) [returns full path with appropriate separators]

file.path() [joins with OS-specific separator]

and so on...



回答6:

You could create a wrapper function around all path names:

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

[Edit]: Thanks Hadley. I corrected the error there.

Incidentally, I found this very useful discussion on this subject.



回答7:

This is AutoIt code which does the same thing (replaces \ with /).

Local $text1 = ClipGet() $text2=StringReplace($text1,"\","/") ClipPut($text2) 


回答8:

why not create a function that checks the OS and returns the proper file separator (the java solution i believe)?

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

you can pick a shorter name if you like. The big flaw here is that you have to paste together file paths, but it's still worth it long term if you're working on big projects.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!