首页 > 解决方案 > 如何在R中检查条件后向控制台发送消息但不返回NULL而不是返回

问题描述

这可能是重复的,但我找不到相关的问题。基本上,我想在某些条件后向控制台发送一条消息并返回“无”。此外,我试图理解并理解何时/如果message()返回 a 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.

reprex 包(v0.3.0)于 2019 年 7 月 9 日创建

  1. 期望的输出是foo_03(),但这是到达那里的最佳方式吗?
  2. 为什么foo_02()foo_03不同?
  3. 在这里相关吗invisible

我知道stop(),但更喜欢来自message().

标签: rerror-handling

解决方案


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)足够了)。


推荐阅读