按照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.
我错过了什么?
答案 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)
而且它们不一定是因为它们已经是字符串。