你如何在R中打印到stderr?

时间:2009-07-10 11:25:48

标签: r printing stderr

如何在stderr打印到R

这对于用Rscript编写的脚本特别有用。

5 个答案:

答案 0 :(得分:51)

实际上以下内容对我有用:

write("prints to stderr", stderr())

write("prints to stdout", stdout())

答案 1 :(得分:11)

这是一个更灵活的版本,用于在Rscript中调试/详细使用。它不仅会根据你的要求打印到stderr,而且还允许你传递可变数量的参数,类型等,如printf那样。

v <- function(...) cat(sprintf(...), sep='', file=stderr())

现在可以做以下事情:

v("name: %s  age: %d\n", name, age)

答案 2 :(得分:7)

  

是否可以配置打印件   打印到stderr的功能?

From Ripley himself

  

不,但标准输出的地方是   由sink()控制,所以你可以   达到同样的效果。 R内部   不知道输出是什么来的   print()(不只是一个   功能,但数百种方法)。

答案 3 :(得分:2)

message('for writing diagnostic info to standard error')
  

消息用于生成“简单”诊断消息,既不是警告也不是错误,但仍然表示为条件。与警告和错误不同,最终换行符被视为消息的一部分,并且是可选的。默认处理程序将消息发送到stderr()连接。

答案 4 :(得分:2)

与接受的答案建议使用write()函数相反,这是对函数的不当使用,因为该函数旨在用于将数据写入文件而不是文件消息。在write() documentation中,我们有:

  

数据(通常是矩阵)x被写入文件文件。如果x是二维矩阵,则需要对其进行转置,以使文件中的列与内部表示中的列相同。

此外,请注意,write()数据列的输出提供了方便的包装。

write
# function (x, file = "data", ncolumns = if (is.character(x)) 1 else 5, 
#     append = FALSE, sep = " ") 
# cat(x, file = file, sep = c(rep.int(sep, ncolumns - 1), "\n"), 
#     append = append)

也就是说,我建议在file = ...参数中将cat()与相应的condition handler stderr() or stdout()一起使用。

因此,要向标准错误发送一条消息,应使用:

cat("a message that goes to standard error", file = stderr())

或者:

message("also sent to standard error")

对于标准 out ,只需直接使用cat(),因为默认情况下它已写入stdout()

cat("displays in standard out by default")