---------- 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]]


