评估dplyr :: case_when()

问题描述 投票:1回答:1

按照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。

我错过了什么?

r dplyr case-when
1个回答
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)而且它们不一定是因为它们已经是字符串。

© www.soinside.com 2019 - 2024. All rights reserved.