返回函数结果后发送消息

时间:2014-08-26 06:19:09

标签: r

考虑以下函数foo

foo <- function(x) {
    print(x)
    message("test message")
}

我希望在功能结果之后传递消息,这样如果结果很长,我就不必向上滚动以查看是否有重要信息消息(或更改我的max.print选项)。问题是我想在不打印实际结果的情况下分配结果。

有没有办法打印函数的结果,然后是消息,还有这样当我分配结果时什么都没打印?理想情况下,我希望完全避免使用print

没有分配的期望结果是

> foo(5)                            
# [1] 5
# test message 

分配所需的结果是

> bar <- suppressMessages(foo(5))
> bar
# [1] 5

1 个答案:

答案 0 :(得分:8)

您可以通过为foo功能创建一个类来实现此目的,例如bar,然后为这个新类创建一个print方法。

例如:

foo <- function(x) {
  class(x) <- c("bar", class(x))
  x
}


print.bar <- function(x, message=TRUE, ...){
  class(x) <- setdiff("bar", class(x))
  NextMethod(x)
  if(message)   message("test message")

}

现在尝试一下:

foo(5)
[1] 5
test message

分配:

x <- foo(5)
x
[1] 5
test message

print方法交互的其他一些方式:

print(x, message=FALSE)
[1] 5

suppressMessages(print(x))
[1] 5