返回函数结果后发送消息

Ric*_*ven 5 r

考虑以下功能 foo

foo <- function(x) {
    print(x)
    message("test message")
}
Run Code Online (Sandbox Code Playgroud)

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

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

没有赋值的期望结果是

> foo(5)                            
# [1] 5
# test message 
Run Code Online (Sandbox Code Playgroud)

分配的期望结果是

> bar <- suppressMessages(foo(5))
> bar
# [1] 5
Run Code Online (Sandbox Code Playgroud)

And*_*rie 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")

}
Run Code Online (Sandbox Code Playgroud)

现在尝试一下:

foo(5)
[1] 5
test message
Run Code Online (Sandbox Code Playgroud)

随着任务:

x <- foo(5)
x
[1] 5
test message
Run Code Online (Sandbox Code Playgroud)

与该print方法交互的其他一些方法:

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

suppressMessages(print(x))
[1] 5
Run Code Online (Sandbox Code Playgroud)