考虑以下功能 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)
您可以通过为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)