Hello,

I plan to use a script with R CMD BATCH on different platforms Linux, Windows and Mac OSX. I use the commandArgs(trailing = FALSE) function to retrieve the name of the script and the arguments (example below with output.) The online docs for "Introduction to R" (sections B.1 Invoking R from the command line and B.4 Scripting with R) and help("commandArgs") leave my head spinning regarding the contents of the arguments when trailing = FALSE.


(1) What should I expect from commandArgs() when used with R CMD BATCH?

The docs for commandArgs() states, "These arguments are captured before the standard R command line processing takes place. This means that they are the unmodified values." However, if I call a script like this ...

R CMD BATCH --slave --vanilla '--args dogs cats verbose=TRUE' /Users/ Shared/code/R/hbb/pam/script.r my.out

... the actual arguments are as shown in the example output below. You can see that "--restore --save --no-readline" were picked up which seems to contradict the documentation. In the online docs (http://cran.r-project.org/doc/manuals/R-intro.html#Invoking-R ) the --vanilla argument is described as a combination of --no-save, -- no-environ, --no-site-file, --no-init-file and --no-restore. So now I am wondering if I am confounding the arguments to invoke R with the arguments to invoke R via CMD BATCH.

(2) Does the name of the script being called always fall in the third element of the commandArgs() value? If so, does it always include the full path?

(3) Are "--arg" and the supplied arguments always last in the commandArgs() value? The docs for commandArgs() states, "This is especially useful with the --args command-line flag to R, as all of the command line after that flag is skipped," so I feel pretty confident that they will be last. But given my confusion in (1) above ....


Thanks,
Ben


###### script begin
args = commandArgs()

cat("All the arguments...\n\n")
cat(args, sep = "\n")
cat(" \n")
cat(paste("nargs=", length(args)), "\n")
cat(" \n")
cat(paste("source is", basename(args[3]), sep = " "), sep = "\n")

ix = grep("--arg", args, fixed = TRUE)
if (ix < length(args)){
   for (i in (ix+1):length(args)) {
    cat(paste("argument #",i-ix,"-->",args[i], sep=" "), sep = "\n")
   }
}

ecode = 0
q(runLast = FALSE, save = "no", status = ecode)
###### script end

######  output file begin
All the arguments...

/Library/Frameworks/R.framework/Resources/bin/exec/i386/R
-f
/Users/Shared/code/R/hbb/pam/script.r
--restore
--save
--no-readline
--slave
--vanilla
--args
dogs
cats
verbose=TRUE

nargs= 12

source is script.r
argument # 1 --> dogs
argument # 2 --> cats
argument # 3 --> verbose=TRUE
#### output file end


##### session info
> sessionInfo()
R version 2.10.1 (2009-12-14)
i386-apple-darwin9.8.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_2.10.1
#######

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to