r - 为什么 rlang::quo_is_missing(quo(NA)) 评估为 FALSE?
问题描述
如果我理解, rlang::quo_is_missing 会评估 quosure 并检查它是否包含缺失值。如果是,它应该返回 TRUE,否则返回 FALSE。然而,我尝试了以下组合,它总是返回 FALSE:
rlang::quo_is_missing(quo(NA))
rlang::quo_is_missing(quo(NA_character_))
rlang::quo_is_missing(quo(NA_integer_))
如果我尝试非 NA 值,它也会返回 FALSE,正如预期的那样:
rlang::quo_is_missing(quo("hello"))
当值明显丢失时,为什么它返回 FALSE?
解决方案
“缺失”是一个特殊术语,指的是根本不存在的值。NA
与“缺失”不同——NA
它本身就是一个值。在基础 R 中,您可以比较函数is.na()
,并且missing()
每个函数都做不同的事情。quo_is_missing
就像missing()
函数一样,不是is.na
,只有在根本没有值时才返回 true:
rlang::quo_is_missing(quo())
如果你想检查 NA,你可以写一个助手
quo_is_na <- function(x) {
!rlang::quo_is_symbolic(x) &&
!rlang::quo_is_missing(x) &&
!rlang::quo_is_null(x) &&
is.na(rlang::quo_get_expr(x))
}
quo_is_na(quo())
# [1] FALSE
quo_is_na(quo(x+y))
# [1] FALSE
quo_is_na(quo(NULL))
# [1] FALSE
quo_is_na(quo(42))
# [1] FALSE
quo_is_na(quo(NA))
# [1] TRUE
quo_is_na(quo(NA_character_))
# [1] TRUE
推荐阅读
- opengl - GLSL 片段着色器中的 2D 颜色网格
- javascript - 查找恰好存在于一个数组中的最小值
- viber - 从 Viber 的键盘按钮图像中获取错误图像
- python - 是否可以在 pysimplegui 中创建一个文本框(InputText)来自动完成用户尝试输入的内容?
- excel - 如何将焦点设置到 IE 子页面来控制它
- mongodb - Mongo db - 如何通过一次查找从同一个集合中获取两个计数?
- reactjs - 将 React Navigation 用于屏幕内的导航器?
- html - 在导航栏中定位项目
- android - Android Studio 从没有提供 jar 文件的 github 导入库
- php - 是否有带有忽略选项的 insertUsing?