Wacek, this work for me.  Takk!

Mvh.
Marie

On Wed, Mar 25, 2009 at 2:59 PM, Wacek Kusnierczyk <
waclaw.marcin.kusnierc...@idi.ntnu.no> wrote:

> Wacek Kusnierczyk wrote:
> > hacking up on gabor's solution, i've created a trivial function that
> > will allow you to access a file given a path relative to the path of the
> > file calling the function.
> >
> > to be concrete, suppose you have two files -- one library and one
> > executable -- located in two sibling directories, and you want one of
> > them to access (e.g., source) the other without the need to specify the
> > absolute path, and irrespectively of the current working directory.
> > here is a simple example.
> >
> >     mkdir foo/{bin,lib} -p
> >
> >     echo '
> >        # the library file
> >        foo = function() cat("foo\n")
> >     ' > foo/lib/lib.r
> >
> >     echo '
> >        # the executable file
> >        source("http://miscell.googlecode.com/svn/rpath/rpath.r";)
> >        source(rpath("../lib/lib.r"))
> >        foo()
> >     ' > foo/bin/bin.r
> >
>
> one thing i forgot to add:  that contrarily to what gabor warned about
> his solution, you don't have to have the call to rpath at the top level,
> and can embed it in nested nevironments or calls; thus, the following
> executable:
>
>    echo '
>       # the executable file
>       source("http://miscell.googlecode.com/svn/rpath/rpath.r";)
>        (function()
>          (function()
>             (function() {
>                 source(rpath("../lib/lib.r"))
>                foo() })())())()
>    ' > foo/bin/bin.r
>
> will still work as below.
>
> > now you can execute foo/bin/bin.r from whatever location, or source it
> > in r within whatever working directory, and still have it load
> > foo/lib/lib.r:
> >
> >     r foo/bin/bin.r
> >     # foo
> >
> >     (cd foo; r bin/bin.r)
> >     # foo
> >
> >     r -e 'source("foo/bin/bin.r")'
> >     # foo
> >
> >     (cd foo/bin; r -e 'source("bin.r")')
> >     # foo
> >
> > so the trick for you is to source rpath, and voila.  (note, it's not
> > foolproof;  as duncan explained, such approach may not work in some
> > circumstances.)
> >
> > does this address your problem?
> >
> > hilsen,
> > vQ
> >
> > Gabor Grothendieck wrote:
> >
> >> See:
> >>
> >> https://stat.ethz.ch/pipermail/r-help/2009-January/184745.html
> >>
> >> On Tue, Mar 24, 2009 at 7:16 AM, Marie Sivertsen <mariesiv...@gmail.com>
> 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.
> >>>
> >>> Mvh.
> >>> Marie
>
>

        [[alternative HTML version deleted]]

______________________________________________
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