r - 如何在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 日创建
- 期望的输出是
foo_03()
,但这是到达那里的最佳方式吗? - 为什么
foo_02()
和foo_03
不同? - 在这里相关吗
invisible
?
我知道stop()
,但更喜欢来自message()
.
解决方案
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)
足够了)。
推荐阅读
- c# - 尝试将 Datagridview 列导出保存为 PDF 时访问被拒绝
- pytorch - PyTorch - 改变 Conv2d 的权重
- mongodb - 如何在 Rust 中使用 Mongodb::cursor?
- machine-learning - 如何部署没有预测属性的模型?
- javascript - 使用 JavaScript 在每 2 位小数后拆分一个字符串
- c# - IMetaDataEmit::DefineUserString 返回 HRESULT: -2147024882 (0x8007000E E_OUTOFMEMORY)
- sql - datasource.error microsoft sql:invalid column name 'generated_always_type' 错误代码:2146232060
- javascript - SwiperJS 平滑自动高度修复
- c# - Garbage Collection如何收集具有继承性的对象
- google-cast - Chromecast 调试 - 可以投射但不能检查