Как я могу проверить, возвращает ли функция сообщение - PullRequest
0 голосов
/ 08 мая 2019

ФОН: В R пакет "testit" ( здесь ) имеет функции has_warning и has_error, но я ищу функцию, которая возвращает логический TRUE / FALSE, если has_message .

WHY : чтобы определить, когда 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

1 Ответ

4 голосов
/ 08 мая 2019

Вы можете использовать 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 или другого вывода.Нам нужно, чтобы final == TRUE возвращал FALSE, когда сообщения не было, иначе для последних примеров не было бы вывода.

...