如何使用R CMD BATCH抑制输出的行号?

tom*_*eng 12 r stdout

如果我有一个R脚本:

print("hi")
commandArgs()
Run Code Online (Sandbox Code Playgroud)

我运行它:

r CMD BATCH --slave --no-timing test.r output.txt
Run Code Online (Sandbox Code Playgroud)

输出将包含:

[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"                                                    
Run Code Online (Sandbox Code Playgroud)

我怎样才能抑制行号[1] .. [7] 在输出中只显示脚本的输出?

Dav*_* J. 13

使用cat而不是print如果要取消行号([1],[2]输出,...).

我想你也想要传递命令行参数.我认为最简单的方法是使用RScript shebang创建一个文件:

例如,创建一个名为的文件args.r:

#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
cat(args, sep = "\n")
Run Code Online (Sandbox Code Playgroud)

使其可执行,chmod +x args.r然后您可以运行它./args.r ARG1 ARG2

FWIW,用R CMD BATCH ...语法传递命令行参数是一件痛苦的事.以下是您的操作方法:R CMD BATCH "--args ARG1 ARG2" args.r注意引号.这里有更多讨论

更新:改变上面的shebang线#!/usr/bin/Rscript#!/usr/bin/env Rscript响应@ mbq的评论(谢谢!)


Dir*_*tel 5

是的,活度是正确的-使用Rscript,或者,如果你的船浮筒,利特勒:

$ 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"
$
Run Code Online (Sandbox Code Playgroud)

您可能希望查看CRAN包getoptoptparse以进行参数解析,就像在其他脚本语言中一样