If I have an R script:
print("hi") commandArgs()
And I run it using:
r CMD BATCH --slave --no-timing test.r output.txt
The output will contain:
[1] "hi" [1] "/Library/Frameworks/R.framework/Resources/bin/exec/x86_64/R" [2] "-f" [3] "test.r" [4] "--restore" [5] "--save" [6] "--no-readline" [7] "--slave"
How can i suppress the line numbers[1]..[7] in the output so only the output of the script appears?
Yes, mbq is right -- use Rscript
, or, if it floats your boat, littler:
$ cat /tmp/tommy.r #!/usr/bin/r cat("hello world\n") print(argv[]) $ /tmp/tommy.r a b c hello world [1] "a" "b" "c" $
You probably want to look at CRAN packages getopt and optparse for argument-parsing as you'd do in other scripting languages/
Use cat
instead of print
if you want to suppress the line numbers ([1]
, [2]
, ...) in the output.
I think you are also going to want to pass command line arguments. I think the easiest way to do that is to create a file with the RScript shebang:
For example, create a file called args.r
:
#!/usr/bin/env Rscript args <- commandArgs(TRUE) cat(args, sep = "\n")
Make it executable with chmod +x args.r
and then you can run it with ./args.r ARG1 ARG2
FWIW, passing command line parameters with the R CMD BATCH ...
syntax is a pain. Here is how you do it: R CMD BATCH "--args ARG1 ARG2" args.r
Note the quotes. More discussion here
UPDATE: changed shebang line above from #!/usr/bin/Rscript
to #!/usr/bin/env Rscript
in response to @mbq's comment (thanks!)
Use commandArgs(TRUE)
and run your script with Rscript
.
EDIT: Ok, I've misread your question. David has it right.