如果我有一个R脚本:
print("hi")
commandArgs()
我用它来运行:
r CMD BATCH --slave --no-timing test.r output.txt
输出将包含:
[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"
如何抑制行号[1] .. [7]在输出中只显示脚本的输出?
答案 0 :(得分:13)
如果要取消输出中的行号(cat
,print
,...),请使用[1]
代替[2]
。
我认为你也想要传递命令行参数。我认为最简单的方法是使用RScript shebang:
创建一个文件例如,创建一个名为args.r
的文件:
#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
cat(args, sep = "\n")
使用chmod +x args.r
使其可执行,然后您可以使用./args.r ARG1 ARG2
FWIW,使用R CMD BATCH ...
语法传递命令行参数很痛苦。以下是您的操作方法:R CMD BATCH "--args ARG1 ARG2" args.r
注意引号。更多讨论here
更新:为了响应@ mbq的评论(谢谢!),将{b}从#!/usr/bin/Rscript
更改为#!/usr/bin/env Rscript
以上
答案 1 :(得分:5)
是的,mbq是对的 - 使用Rscript
,或者,如果它漂浮在你的船上,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"
$
答案 2 :(得分:2)
使用commandArgs(TRUE)
并使用Rscript
运行您的脚本。
答案 3 :(得分:0)
默认情况下,R将print(...)
前面的命令编号添加到stdout,如下所示:
print("we get signal")
产生:
[1]“我们得到信号”
Rscript允许用户更改诸如print之类的功能的定义,因此默认情况下它达到了我们的目的:
print = cat
print("we get signal")
产生:
我们得到信号
请注意,命令编号和双引号已消失。
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")
打印:
我们得到信号
如果您将打印用作穷人调试器...我们不是在嘲笑您,而是在与您一起笑。