下面是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。
我遗漏了什么?
发布于 2017-12-18 03:48:21
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),也不一定是因为它们已经是字符串了。
https://stackoverflow.com/questions/47861568
复制相似问题