R command line passing a filename to script in arguments (Windows)
As I said in my comment, I would use Rscript
instead of R CMD BATCH
:
Rscript myscript.R batch.csv
where myscript.R contains:
args <- commandArgs(TRUE)
batch_args <- read.table(args[1], sep=",")
# loop over multiple runs
Besides using Rscript (as Josh said) you should also use the CRAN packages getopt or optparse as they were written for this very purpose.
What do you mean by 'no luck'? The filename is in there, in the commandArgs() function, you just have to work out how to get it out. Code and error messages are handy.
That's not a problem if the only extra argument is a filename, you know its position. What will confuse you is when you start having more complex argument passing.
You're also complicating things with passing 'fn=foo.csv'. Just pass the filename and assign it to fn in your script. If you really want to use eval you probably need to quote your filename, thus myscript.r is:
ca = commandArgs(trailingOnly=TRUE)
eval(parse(text=ca))
print(read.csv(fn))
and run thus:
R --slave "--args fn='batch.csv'" < myscript.r
A B C
1 1 2 3
2 6 8 3
Where batch.csv is a simple csv file.
You could do a loop over "ca" in your script and eval everything. It's slightly dangerous though, since you could easily break basic functionality.
Personally I'd loop over ca, look for name=value pairs for a known set of names, and set them. Basically implementing getopt, but someone has probably done that already...