[R] relative file path

Duncan Murdoch murdoch at stats.uwo.ca
Mon Feb 22 22:48:46 CET 2010


On 22/02/2010 3:44 PM, Rob Forler wrote:
> Hello,
>
> Is there a way to find where a script is located within a script? getwd()
> doesn't do what I want because it depends on where R was called from. I want
> something like source("randomFile") and within randomFile there is a
> function called whereAmI() which returns c:\blah\blah2\randomFile.R
>
> In perl there is a library called FindBin and $FindBin::Bin has the
> directory of the file that called $FindBin::Bin.

Some dirty code to do that would be to look back through the stack for 
the local variables in the source() call, and expand the filename from 
there.  That's probably what Hadley's code was doing in the thread that 
Hrishi mentioned.

Here's a version:


whereAmI <- function() {
   filename <- sys.frames()[[1]]$ofile
   normalizePath(filename)
}


This works when a call to it is in a file being sourced; if there were 
nested source() calls, then something more elaborate like Hadley's code 
would be needed.  And this might break tomorrow:  you're not supposed to 
look at local variables like ofile.

Duncan Murdoch



More information about the R-help mailing list