如果我有一个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的评论(谢谢!)
是的,活度是正确的-使用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包getopt和optparse以进行参数解析,就像在其他脚本语言中一样