Как отправить сообщение на консоль, но ничего не вернуть вместо NULL после проверки условия в R - PullRequest
1 голос
/ 09 июля 2019

Возможно, это дубликат, но я не смог найти подходящий вопрос.По сути, я хотел бы отправить сообщение a на консоль после некоторого условия и вернуть «ничто».Кроме того, я пытаюсь понять и понять, когда / если message() возвращает NULL:

foo_01 <- function(bar = NULL) {
  if (is.null(bar)) {
    message("Error: please provide a value for bar.")
    return()
  }
}

foo_02 <- function(bar = NULL) {
  if (is.null(bar)) {
    msg <- message("Error: please provide a value for bar.")
    return(msg)
  }
}

foo_03 <- function(bar = NULL) {
  if (is.null(bar)) {
    return(message("Error: please provide a value for bar."))
  }
}

foo_01()
#> Error: please provide a value for bar.
#> NULL
foo_02()
#> Error: please provide a value for bar.
#> NULL
foo_03()
#> Error: please provide a value for bar.

Создано в 2019-07-09 пакетом представ. (v0.3.0)

  1. Желаемый результат будет foo_03(), но лучше ли это туда добраться?
  2. Почему foo_02() иfoo_03 отличается?
  3. Имеет ли значение invisible здесь?

Мне известно о stop(), но я бы предпочел более "чистый" вывод из message().

1 Ответ

3 голосов
/ 09 июля 2019

message не чище - если ваш код хочет выдать ошибку, он должен использовать stop для этого.Также вы можете обнаружить отсутствующий аргумент, используя missing.

foo2 <- function(bar) {
  if (missing(bar)) stop("please provide a value for bar")
  bar
}
foo2()

Вместо return(x) вы можете использовать return(invisible(x)) для возврата x, но не для его отображения (или, если это последний запуск операторатогда достаточно invisible(x)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...