【发布时间】:2021-04-22 22:50:33
【问题描述】:
Case_when 似乎在不满足条件的情况下也会执行代码,见下文:
df <- tibble(
group = c('A', 'A', 'B', 'C'),
take_max = c(F, F, T, T),
value = c(NA, NA, 2, 3)
)
df %>%
group_by(group) %>%
mutate(
res = case_when(
take_max ~ max(value, na.rm = T),
TRUE ~ 1
)
)
case_when 正确计算了值,但它也返回此警告:
Warning: Problem with `mutate()` input `res`.
ℹ no non-missing arguments to max; returning -Inf
ℹ Input `res` is `case_when(take_max ~ max(value, na.rm = T), TRUE ~ 1)`.
ℹ The warning occurred in group 1: group = "A".
为什么case_when 甚至在组“A”的情况下计算最大值,而它不应该看到等式的右侧?
【问题讨论】:
-
查看
?case_when帮助页面中的示例。有一条注释说“case_when() 计算所有 RHS 表达式,然后通过提取选定的(通过 LHS 表达式)部分来构造其结果。”case_when不会有条件地评估表达式,它只是有条件地返回不同的值。