为何dplyr::case_when()中LHS为条件、RHS为输出?
关于case_when中~语法的澄清
你对case_when的逻辑理解完全没问题,但这里有个核心误区:case_when里的~和回归、绘图场景里的公式语法不是一回事,不存在“依赖关系相反”的矛盾,只是同一个符号被用在了两种完全不同的语法场景里。
具体来说:
- 回归、绘图(比如
lattice::xyplot(mpg ~ disp))里的~是R标准公式语法的一部分,它的作用是定义统计变量间的因果/关联关系,固定了“因变量(LHS)依赖自变量(RHS)”的语义,这种公式会被专门的模型或绘图函数解析成对应的结构。 - 而dplyr::case_when里的
~只是一个自定义的分隔符,和公式语法毫无关系。它的唯一作用是把“左侧的条件判断”和“条件成立时返回的右侧值”对应起来,逻辑等价于向量化的if-else链,比如:
这里的case_when( mtcars$hp > 200 ~ "高马力", mtcars$hp > 100 ~ "中马力", TRUE ~ "低马力" )~只是为了让条件和结果的对应关系更直观,完全没有“依赖方向”的公式语义。
至于为什么选~作为分隔符,大概率是因为这个符号在R生态里已经被用户熟知,用来表示“对应关系”很直观,同时不会和其他已有语法(比如=、->)产生冲突。
内容的提问来源于stack exchange,提问作者vorpal
相关产品推荐
相关产品推荐

