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

From: Uwe Ligges <ligges_at_statistik.uni-dortmund.de>
Date: Sat 09 Apr 2005 - 20:17:01 EST

Please see also ?commandArgs

Uwe Ligges

Darren Weber wrote:

> ---------- Forwarded message ----------
> From: Darren Weber <darrenleeweber@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@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@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@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@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@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@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


R-help@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 Received on Sat Apr 09 20:19:56 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:05 EST