考虑以下函数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
答案 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