tags:

views:

498

answers:

6

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  A: 

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

Etiennebr
Yes, I have done that too but it is a bit of a nuisance unless I could make a macro of it in Tinn-R. Do you use Tinn-R?
Farrel
Yes, a macro would be nice. I don't use Tinn-R alot anymore, but I still have that problem with other editors.Maybe someone speaking fluent regular expression could give one that handle the most common cases of replacements and mostly not replace every \.
Etiennebr
A: 

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

Stephen
And don't forget about `file.choose()`
hadley
Good one. I always forget that one.
Stephen
A: 

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.

Shane
That's not a valid function, and in general that strategy is unlikely to work.
hadley
A: 

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.

Dan
+2  A: 

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.

Matt Parker
Yip. ClipPath looks like a really easy solution. Have you seen if it runs in Vista or Windows 7. I noticed the line "Latest Version 2.1: Download File Size: 30kb (Supported OS: Win95/98/Me/NT4.0/2000/XP ) "Now that I know of this no brainer solution let me look if something exists similar to it in Tinn-R.
Farrel
Haven't tested it, sorry - I just saw it in that blog entry and immediately thought of this question. Hope it works! It does seem like it wouldn't be too challenging to add such a feature to Tinn-R, if the devs sign on.
Matt Parker
I looke around tinn-r and found no built in function to do it. I have not tried writing macros in tinn-r so I am going to turn to autohotkey.
Farrel
A: 

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.

Farrel
How do I now put a autohotkey tag on this question or this answer?
Farrel