---------- Forwarded message ----------
From: Darren Weber <[EMAIL PROTECTED]>
Date: Apr 8, 2005 1:16 PM
Subject: Re: [R] Is a .R script file name available inside the script?
To: Gabor Grothendieck <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
>
> 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 <[EMAIL PROTECTED]>
> 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())))
>
> ______________________________________________
> [email protected] 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]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html