在dplyr::case_when中,何时优先使用TRUE而非.default参数?
dplyr::case_when:用
TRUE ~ 默认值还是.default参数? 两种写法核心功能一致,但适用场景各有侧重,分情况选择即可:
优先用TRUE ~ 默认值的场景:
- 兼容旧版dplyr:
.default是dplyr 1.1.0才新增的参数,如果项目需要适配1.0.x及更早版本(比如团队成员仍在用旧版本),必须用TRUE ~的写法,否则会触发语法错误。 - 默认分支要复用前面的临时计算:如果前面的条件分支里定义了临时变量或完成了复杂计算,最后默认分支需要直接复用这些结果时,
TRUE ~的写法能实现。比如:
data %>% mutate(test = case_when( a == "Foo" ~ {len <- nchar(a); paste(len, "Bar")}, a == "Baz" ~ paste(nchar(a), "Foo"), TRUE ~ paste(len, "Other") # 直接调用前面分支的len变量 ))
这种场景下.default做不到,因为它的表达式无法访问前面分支内的临时变量。
- 默认逻辑和前面条件联动:如果默认值不是固定常量,需要基于每行数据做动态计算且逻辑和前面条件有关联,用
TRUE ~的写法会更连贯,代码可读性更强。 - 团队代码风格统一:如果团队一直沿用
TRUE ~的写法,为了保持风格一致,没必要强行切换到.default,避免代码风格混乱。
优先用.default的场景:
- 默认值是简单常量:这种情况
.default写法更简洁,且明确标注这是默认分支,不用翻到最后一行找TRUE,可读性更高,比如:
data %>% mutate(test = case_when( a == "Foo" ~ "Bar", a == "Baz" ~ "Foo", .default = "Other" ))
- 条件分支数量多:当
case_when里有五六个甚至更多条件时,.default放在参数位置,一眼就能看到默认值,不用在一堆条件里找最后一行的TRUE分支。
内容的提问来源于stack exchange,提问作者mhovd
相关产品推荐
相关产品推荐

