Darren Weber
2005-Mar-18 21:41 UTC
[R] Is a .R script file name available inside the script?
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. Best, Darren
Gabor Grothendieck
2005-Mar-19 03:00 UTC
[R] Is a .R script file name available inside the script?
Darren Weber <darrenleeweber <at> 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())))
Gabor Grothendieck
2005-Apr-07 01:56 UTC
[R] Is a .R script file name available inside the script?
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> 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())))
Roger D. Peng
2005-Apr-07 13:25 UTC
[R] Is a .R script file name available inside the script?
I think you might want 'commandArgs()' which gives you the original command line call. -roger Darren Weber wrote:> 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. > > Best, Darren > > ______________________________________________ > 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 >
Darren Weber
2005-Apr-08 20:17 UTC
Fwd: [R] Is a .R script file name available inside the script?
---------- 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]]