How can I suppress the line numbers output using R

2019-04-04 13:53发布

问题:

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?

回答1:

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/



回答2:

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!)



回答3:

Use commandArgs(TRUE) and run your script with Rscript.

EDIT: Ok, I've misread your question. David has it right.



标签: r stdout