Marcin Gomulka
2010-Jun-11 00:33 UTC
[R] setting the current working directory to the location of the source file
AFAIK a script run through source() does not have any legit way to learn about it's own location. I need this to make sure that the script will find its datafiles after I move the whole directory. (The datafiles are in the same directory.) Here is a hack I invented to work around it: print(getwd()) source_pathname = get("ofile",envir = parent.frame()) source_dirname = dirname(source_pathname ) setwd(source_dirname) print(getwd()) Question: Is there a better, cleaner way? Thanks, mrgomel [[alternative HTML version deleted]]
Mohan L
2010-Jun-11 04:26 UTC
[R] setting the current working directory to the location of the source file
On Fri, Jun 11, 2010 at 6:03 AM, Marcin Gomulka <mrgomel@gmail.com> wrote:> AFAIK a script run through source() does not have any legit way to learn > about it's own location. > > I need this to make sure that the script will find its datafiles after I > move the whole directory. (The datafiles are in the same directory.) > > Here is a hack I invented to work around it: > > print(getwd()) > source_pathname = get("ofile",envir = parent.frame()) > source_dirname = dirname(source_pathname ) > setwd(source_dirname) > print(getwd()) > > Question: Is there a better, cleaner way? > >Hi, I am using some thing like this to setup working directory: ##set working directory pwd <- getwd() if (!is.null(pwd)) { setwd(pwd) } else { print("Directory not found") } Thanks & Rg Mohan L [[alternative HTML version deleted]]
Charles C. Berry
2010-Jun-11 05:40 UTC
[R] setting the current working directory to the location of the source file
On Fri, 11 Jun 2010, Marcin Gomulka wrote:> AFAIK a script run through source() does not have any legit way to learn > about it's own location. >You mean like 'test.R' being able to figure out that that is what it is called when it is invoked from source()?> cat("print(eval(sys.calls()[[1]][[2]]))",file='test.R') > source('test.R')[1] "test.R"> setwd('projects') > source('../test.R')[1] "../test.R"> source(list.files('..','test.R$',full=TRUE))[1] "../test.R"> >See ?sys.calls HTH, Chuck> I need this to make sure that the script will find its datafiles after I > move the whole directory. (The datafiles are in the same directory.) > > Here is a hack I invented to work around it: > > print(getwd()) > source_pathname = get("ofile",envir = parent.frame()) > source_dirname = dirname(source_pathname ) > setwd(source_dirname) > print(getwd()) > > Question: Is there a better, cleaner way? > > Thanks, > mrgomel > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >Charles C. Berry (858) 534-2098 Dept of Family/Preventive Medicine E mailto:cberry at tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
Henrik Bengtsson
2010-Jun-11 09:30 UTC
[R] setting the current working directory to the location of the source file
Isn't this what source(..., chdir=TRUE) is for? See help(source). /H On Fri, Jun 11, 2010 at 2:33 AM, Marcin Gomulka <mrgomel at gmail.com> wrote:> AFAIK a script run through source() does not have any legit way to learn > about it's own location. > > I need this to make sure that the script will find its datafiles after I > move the whole directory. (The datafiles are in the same directory.) > > Here is a hack I invented to work around it: > > print(getwd()) > source_pathname ?= get("ofile",envir = parent.frame()) > source_dirname = dirname(source_pathname ) > setwd(source_dirname) > print(getwd()) > > Question: Is there a better, cleaner way? > > Thanks, > mrgomel > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >
Gabor Grothendieck
2010-Jun-13 13:07 UTC
[R] setting the current working directory to the location of the source file
On Thu, Jun 10, 2010 at 8:33 PM, Marcin Gomulka <mrgomel at gmail.com> wrote:> AFAIK a script run through source() does not have any legit way to learn > about it's own location. > > I need this to make sure that the script will find its datafiles after I > move the whole directory. (The datafiles are in the same directory.) > > Here is a hack I invented to work around it: > > print(getwd()) > source_pathname ?= get("ofile",envir = parent.frame()) > source_dirname = dirname(source_pathname ) > setwd(source_dirname) > print(getwd()) >This variation is nearly the same: https://stat.ethz.ch/pipermail/r-help/2010-May/238804.html