On 24/03/2009 7:16 AM, Marie Sivertsen wrote:
Dear useRs,

I have a collection of source file and some of these call others.  The files
are distribute among a number of directories, and to know how to call some
other file they need to know what file is currently executed.

As example, I have a file 'search.R' located in directory 'bin' which needs
to access the file 'terms.conf' located in the directory 'conf', a sibling
of 'bin'.  I can have somethings like readLines('../conf/terms.conf') in
search.R, but this work only if search.R is executed from bin, when getwd is
'bin'.  But when search.R calls from the parent as bin/search.R or any other
derectory then R complains that it could not find the file
'../conf/terms.conf'.

So my questions is:  how can the file search.R, when executied, discover its
own location and load terms.conf from <location of
search.R>/../conf/terms.conf?  the location of search.R can be unrelated to
the current directory.

In general it can't. Since source() can work on a connection and a connection doesn't have to be a file, there may not be a location.

You could write your own Source function, something like this:

filenamestack <- c()

Source <- function(filename, ...) {
   # push the new filename
   filenamestack <<- c(filename, filenamestack)

   # on exit pop it off the stack
   on.exit(filenamestack <<- filenamestack[-1])

   source(filename, ...)
}

and then examine filenamestack[1] to find the name of the file currently being sourced. (But Source() won't work on connections, only on filenames.)

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to