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

时间:2010-07-17 14:44:03

标签: r stdout

如果我有一个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]在输出中只显示脚本的输出?

4 个答案:

答案 0 :(得分:13)

如果要取消输出中的行号(catprint,...),请使用[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"
$

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

答案 2 :(得分:2)

使用commandArgs(TRUE)并使用Rscript运行您的脚本。

编辑:好的,我误解了你的问题。大卫说得对。

答案 3 :(得分:0)

从命令编号停止Rscript的打印输出

默认情况下,R将print(...)前面的命令编号添加到stdout,如下所示:

print("we get signal")

产生:

  

[1]“我们得到信号”

Rscript允许用户更改诸如print之类的功能的定义,因此默认情况下它达到了我们的目的:

print = cat
print("we get signal")

产生:

  

我们得到信号

请注意,命令编号和双引号已消失。

通过使用R个一流的功能来获得更多的打印控制权:

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

打印:

  

我们得到信号

如果您将打印用作穷人调试器...我们不是在嘲笑您,而是在与您一起笑。