背景::在R中,包“ testit”(here)具有功能has_warning
和has_error
,但是我正在寻找一个如果 has_message ,则返回逻辑TRUE / FALSE。
为什么:标识webElem$submitElement()
包中的RSelenium
何时返回RSelenium消息,因为硒消息未归类为R中的警告或错误。
是否可以测试函数是否在R中返回了一条消息?
理想情况如下:
#Ideally a function like this made up one:
has_message(message("Hello ","World!"))
[1] TRUE
has_message(print("Hello World!"))
[1] FALSE
答案 0 :(得分:4)
您可以使用tryCatch
:
has_message <- function(expr) {
tryCatch(
invisible(capture.output(expr)),
message = function(i) TRUE
) == TRUE
}
has_message(message("Hello World!"))
# TRUE
has_message(print("Hello World!"))
# FALSE
has_message(1)
# FALSE
使用tryCatch
评估invisible(capture.output())
中的表达式以抑制print
或其他输出。当没有消息时,我们需要最终的== TRUE
返回FALSE
,否则最后的示例将没有输出。