开发者

How can I suppress the line numbers output using R CMD BATCH?

If I have an R script:

print("hi")
co开发者_开发技巧mmandArgs()

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?


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


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 commandArgs(TRUE) and run your script with Rscript.

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


Stop Rscript from command-numbering the output from print

By default, R makes print(...) pre-pend command numbering to stdout like this:

print("we get signal")

Produces:

[1] "we get signal"

Rscript lets the user change the definition of functions like print, so it serves our purpose by default:

print = cat
print("we get signal")

Produces:

we get signal

Notice the command numbering and double quoting is gone.

Get more control of print by using R first class functions:

my_print <- function(x, ...){ 
    #extra shenanigans for when the wind blows from the east on tuesdays, go here. 
    cat(x) 
} 
print = my_print 
print("we get signal") 

Prints:

we get signal

If you're using print as a poor mans debugger... We're not laughing at you, we're laughing with you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜