你如何在R中打印到stderr?

Fra*_*ank 49 printing r stderr

你如何打印到stderrR

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

Fra*_*ank 52

实际上以下对我有用:

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

write("prints to stdout", stdout())
Run Code Online (Sandbox Code Playgroud)

  • 此代码也可在Windows上使用。要进行更多格式化控制,可以使用cat代替write。 (2认同)

ari*_*elf 12

这是一个更灵活的版本,用于在Rscript中调试/详细使用.它不仅可以stderr按照您的要求进行打印,而且还允许您传递可变数量的参数,类型等printf.

v <- function(...) cat(sprintf(...), sep='', file=stderr())
Run Code Online (Sandbox Code Playgroud)

现在可以做以下事情:

v("name: %s  age: %d\n", name, age)
Run Code Online (Sandbox Code Playgroud)

等等


Gal*_*ian 7

是否可以将打印功能配置为打印到stderr?

来自里普利本人:

不,但是标准输出的位置由sink()控制,因此您可以实现相同的效果.R内部不知道print()的输出是什么(这不仅仅是一个函数,而是数百种方法).


De *_*ica 5

message('for writing diagnostic info to standard error')
Run Code Online (Sandbox Code Playgroud)

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


coa*_*ess 5

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

数据(通常是矩阵)x 被写入文件 file。如果 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)
Run Code Online (Sandbox Code Playgroud)

也就是说,我建议cat()与适当的条件处理程序stderr()stdout()infile = ...参数一起使用。

因此,要将消息写入标准错误,应使用:

cat("a message that goes to standard error", file = stderr())
Run Code Online (Sandbox Code Playgroud)

或者:

message("also sent to standard error")
Run Code Online (Sandbox Code Playgroud)

对于标准输出,只需cat()直接使用,因为它stdout()默认设置为写入。

cat("displays in standard out by default")
Run Code Online (Sandbox Code Playgroud)