评估dplyr :: case_when()

时间:2017-12-18 02:55:18

标签: r 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.

我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

case_when()逐个评估所有语句,无论前一个语句是否为真(因为它确实评估了TRUE~as.character(x),这是最后一个)

这是误导性的,case_when()的输出是基于第一个真实的陈述。

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

如果x可被5或7整除,则casewhen()不会评估后续情况。 “fizz”和“buzz”是而不是传递给as.character(x)而且它们不一定是因为它们已经是字符串。