Fwd: [R] Is a .R script file name available inside the script?

Uwe Ligges ligges at statistik.uni-dortmund.de
Sat Apr 9 12:17:01 CEST 2005


Please see also ?commandArgs

Uwe Ligges


Darren Weber wrote:

> ---------- Forwarded message ----------
> From: Darren Weber <darrenleeweber at gmail.com>
> Date: Apr 8, 2005 1:16 PM
> Subject: Re: [R] Is a .R script file name available inside the script?
> To: Gabor Grothendieck <ggrothendieck at gmail.com>
> 
> Right, I understand, it could be in.txt has:
> 
> scriptfile <- "Rscript.R"
> source(scriptfile)
> 
> and then Rscript.R contains:
> 
> script.description <- function() eval.parent(quote(scriptfile), n = 3)
> print(basename(script.description()))
> 
> Actually, I've found that just 'scriptfile <-
> basename(eval.parent(quote(scriptfile))'
> is sufficient. Unfortunately, this now requires two files, in.txt AND 
> Rscript.R!
> 
> I think this is a bit clumsy. You need a batch file to define a variable in 
> the 'parent' workspace that is then referred to in the source(script) file. 
> I really just want the argv like construct to work, but having read a few 
> other threads on that topic, it seems that the file name argument is 
> stripped from argv, so this raises a whole lot of trouble to get that 
> working (such as setting an environment variable and then using glob on 
> os.getenv). Anyhow, it's not the elegant, cross-platform solution I expect 
> and desire of R, but there are some solutions.
> 
> I would suggest that R implements a command line argument, maybe --infile 
> and then that filename is available as an internal variable in a standard 
> argv like fashion. The default sink output should be stdout, but a nice 
> alternative is to replace the .R extension with .Rout. Then it becomes 
> possible to call R on any platform with
> 
> R --vanilla --infile Rscript.R
> 
> instead of
> 
> R --vanilla < Rscript.R
> or
> cat Rscript.R | R --vanilla
> 
> On linux, the output would go to stdout/stderr and on windows it might go 
> into Rscript.Rout Have I missed a command line input argument like that? 
> Does --infile exist?
> 
> BTW, I think you meant linux above in reference to the command, echo 
> "source(Rscript.R)" | R --vanilla, as I'm not aware of pipes on windows.
> 
> Best, Darren
> 
> 
> 
> 
> 
> 
> On Apr 6, 2005 6:56 PM, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> 
>>It works for me. Suppose in.txt is a two line file with these two lines:
>>
>>file <- "Rscript.R"
>>source(file)
>>
>>and Rscript.R is a two line file with these two lines:
>>
>>script.description <- function() eval.parent(quote(file), n = 3)
>>print(basename(script.description()))
>>
>>Then here is the output on Windows:
>>
>>C:\Program Files\R\rw2001beta\bin>R --vanilla < in.txt
>>
>>R : Copyright 2004, The R Foundation for Statistical Computing
>>[snip]
>>
>>>file <- "Rscript.R"
>>>source(file)
>>
>>[1] "Rscript.R"
>>
>>Note that 'file' referred to in 'eval.parent' is not the variable that
>>you called 'file' but is an internal variable within the 'source'
>>program that is called 'file'. It has nothing to do with your 'file',
>>which very well could have a different name. In fact you
>>just do this on Windows:
>>
>>echo source("Rscript.R") | R --vanilla
>>
>>From: Darren Weber <darrenleeweber at gmail.com>
>>
>>That is useful, when calling the script like this:
>>
>>
>>>file <- "Rscript.R"
>>>source(file)
>>
>>However, it does not work if we do this from the shell prompt:
>>
>>$ R --vanilla < Rscript.R
>>
>>because the eval.parent statement attempts to access a "base
>>workspace"that does not contain the "file" object/variable, as above.
>>Isthere a solution for this situation? Is the input script file
>>anargument to R and therefore available in something like argv?
>>
>>On Mar 18, 2005 8:00 PM, Gabor Grothendieck <ggrothendieck at myway.com> 
>>wrote:
>>Darren Weber <darrenleeweber <at> gmail.com <http://gmail.com>> writes:
>>
>>:
>>: Hi,
>>:
>>: if we have a file called Rscript.R that contains the following, for 
>>example:
>>:
>>: x <- 1:100
>>: outfile = "Rscript.Rout"
>>: sink(outfile)
>>: print(x)
>>:
>>: and then we run
>>:
>>: >> source("Rscript.R")
>>:
>>: we get an output file called Rscript.Rout - great!
>>:
>>: Is there an internal variable, something like .Platform, that holds
>>: the script name when it is being executed? I would like to use that
>>: variable to define the output file name.
>>:
>>
>>In R 2.0.1 try putting this in a file and sourcing it.
>>
>>script.description <- function() eval.parent(quote(file), n = 3)
>>print(basename(script.description()))
>>
>>If you are using R 2.1.0 (devel) then use this instead:
>>
>>script.description <- function()
>>showConnections() [as.character(eval.parent(quote(file), n = 3)),
>>"description"]
>>print((basename(script.description())))
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide! 
>>http://www.R-project.org/posting-guide.html
>>
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list