R:捕获消息,返回结果(有效)

时间:2015-05-29 11:38:50

标签: r

考虑一下这个功能:

App\Http\Middleware\Oauth2\HttpFoundationBridge\Request

由于只允许调用函数一次的约束(例如,它可能是一个昂贵的计算),我如何从函数调用中获取值并捕获消息(用于处理) ?我正在考虑在hello_world <- function() { message("hello world") "goodbye world" } 电话的环境中缓存价值,但无法解决如何做到这一点。

以下是两个非示例

tryCatch()

1 个答案:

答案 0 :(得分:1)

以下是使用sink的示例:

messageHandler <- function(fun, ...) {
  zz <- textConnection("foo", "w", local = TRUE)
  sink(zz, type = "message")
  res <- fun(...)  
  sink(type = "message")
  close(zz)
  #handle messages
  list(res, messages = foo) 
}


messageHandler(hello_world)
#[[1]]
#[1] "goodbye world"
#
#$messages
#[1] "hello world"

hello_world2 <- function() {
  message("hello world")
  message("how are you")
  "goodbye world"
}
messageHandler(hello_world2)
#[[1]]
#[1] "goodbye world"
#
#$messages
#[1] "hello world" "how are you"

请注意,这也会捕获来自stop的警告和消息,即发送到stderr()的所有内容。