dplyr::case_when() 中的评估

Evaluation in dplyr::case_when()

遵循 dplyr::case_when() 文档中给出的示例:

x <- 1:50
case_when(x %% 35 == 0 ~ "fizz buzz",
          x %% 5 == 0 ~ "fizz",
          x %% 7 == 0 ~ "buzz",
          TRUE ~ as.character(x))

我希望数字 35 会产生 "buzz" 但它会产生 "fizz buzz"

我的推理是 case_when() 会一个接一个地评估所有陈述,而不管前一个陈述是否为真(因为它确实评估 TRUE ~ as.character(x),这是最后一个)并且 35 %% 7 显然是 0。

我错过了什么?

case_when() evaluates all statements one by one regardless if a previous one is true or not (since it does evaluate TRUE ~ as.character(x) which is the last one)

这是误导,case_when() 的输出是基于第一个正确的陈述。

TRUE ~ as.character(x) 表示如果 x 不能被 5 或 7 整除,则 x 将作为字符串返回,即对于 x = 5,将返回“5”。

如果 x 可以被 5 或 7 整除,casewhen() 不评估后续情况。 "fizz" 和 "buzz" 不是 传递给 as.character(x) 并且它们不必传递给 as.character(x),因为它们已经是字符串。