为什么 rlang::quo_is_missing(quo(NA)) 评估为 FALSE?
Why does rlang::quo_is_missing(quo(NA)) evaluate to FALSE?
如果我理解,rlang::quo_is_missing 计算一个 quosure 并检查它是否包含缺失值。如果是,则应 return TRUE,否则应为 FALSE。然而,我尝试了以下组合,但它总是 returns FALSE:
rlang::quo_is_missing(quo(NA))
rlang::quo_is_missing(quo(NA_character_))
rlang::quo_is_missing(quo(NA_integer_))
如果我尝试非 NA 值,它也会 returns FALSE,正如预期的那样:
rlang::quo_is_missing(quo("hello"))
为什么当值明显缺失时 return 为 FALSE?
“缺失”是一个特殊术语,指的是根本不存在的值。 NA
与“缺失”不同——NA
本身就是一个值。在 base R 中,您可以比较函数 is.na()
和 missing()
,每个函数做不同的事情。 quo_is_missing
就像 missing()
函数,而不是 is.na
和 returns 仅当根本没有值时才为真:
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
如果我理解,rlang::quo_is_missing 计算一个 quosure 并检查它是否包含缺失值。如果是,则应 return TRUE,否则应为 FALSE。然而,我尝试了以下组合,但它总是 returns FALSE:
rlang::quo_is_missing(quo(NA))
rlang::quo_is_missing(quo(NA_character_))
rlang::quo_is_missing(quo(NA_integer_))
如果我尝试非 NA 值,它也会 returns FALSE,正如预期的那样:
rlang::quo_is_missing(quo("hello"))
为什么当值明显缺失时 return 为 FALSE?
“缺失”是一个特殊术语,指的是根本不存在的值。 NA
与“缺失”不同——NA
本身就是一个值。在 base R 中,您可以比较函数 is.na()
和 missing()
,每个函数做不同的事情。 quo_is_missing
就像 missing()
函数,而不是 is.na
和 returns 仅当根本没有值时才为真:
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