gpt4 book ai didi

r - 将 R 诊断消息发送到 stdout 而不是 stderr

转载 作者:行者123 更新时间:2023-12-04 23:49:42 26 4
gpt4 key购买 nike

寻找让我将 R 诊断消息(由 message() 产生)重定向到 stdout 的选项,不是 stderr因为它是默认的。
message手册指出:

The default handler sends the message to the stderr() connection.



所以问题是我怎样才能改变这个默认行为?仍然离开 warning() 的重定向和 stop()完整。

已经试过下沉 type='message'但它重定向所有(消息、警告、错误)。

如果有人愿意测试,这是示例脚本 exec_test.R :
print("using print")
cat("using cat\n")
message("using message")
warning("using warning")
stop("using stop")
q("no")

然后将通过以下方式执行:
Rscript exec_test.R 1>> exec_test.Rout 2>> exec_test_error.Rout
我不知道用什么 2>&1因为我的脚本产生了大量 message s,很少有真正的错误,所以我需要将这些日志存储在单独的文件中。

最佳答案

虽然这很可能不是最佳实践,但您可以覆盖 message具有写入 stdout() 的版本默认情况下,对吧?

message <- function (..., domain = NULL, appendLF = TRUE) 
{
args <- list(...)
cond <- if (length(args) == 1L && inherits(args[[1L]], "condition")) {
if (nargs() > 1L)
warning("additional arguments ignored in message()")
args[[1L]]
}
else {
msg <- .makeMessage(..., domain = domain, appendLF = appendLF)
call <- sys.call()
simpleMessage(msg, call)
}
defaultHandler <- function(c) {
cat(conditionMessage(c), file = stdout(), sep = "")
}
withRestarts({
signalCondition(cond)
defaultHandler(cond)
}, muffleMessage = function() NULL)
invisible()
}

关于r - 将 R 诊断消息发送到 stdout 而不是 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com