Question

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

Was it helpful?

Solution

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.

OTHER TIPS

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.

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

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

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...

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.

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

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

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top