Что вы подразумеваете под «не везет»? Имя файла находится там, в функции commandArgs () вам просто нужно решить, как его получить. Код и сообщения об ошибках удобны.
Это не проблема, если единственным дополнительным аргументом является имя файла, вы знаете его позицию. Что вас смущает, так это когда вы начнете передавать более сложные аргументы.
Вы также усложняете ситуацию передачей 'fn = foo.csv'. Просто передайте имя файла и назначьте его в вашем скрипте. Если вы действительно хотите использовать eval, вам, вероятно, нужно указать свое имя в кавычках, поэтому myscript.r:
ca = commandArgs(trailingOnly=TRUE)
eval(parse(text=ca))
print(read.csv(fn))
и беги так:
R --slave "--args fn='batch.csv'" < myscript.r
A B C
1 1 2 3
2 6 8 3
Где batch.csv - простой CSV-файл.
Вы можете сделать цикл над "ca" в вашем скрипте и оценить все. Это немного опасно, так как вы можете легко сломать базовую функциональность.
Лично я зациклился бы на ca, посмотрел бы пары name = value для известного набора имен и установил бы их. В основном реализует Getopt, но кто-то, вероятно, уже сделал это ...