R函数变量解析异常:基于四分位数分类全判为高表达问题排查
问题排查与修正
你的函数出现所有值都被标记为"High expression"的问题,核心原因是在case_when中使用{{var_1}}无法正确解析字符串类型的列名:当你传入字符串参数"Sepal.Length"时,{{var_1}}并没有指向数据框中的Sepal.Length列,而是被当作字面量字符串参与比较,导致逻辑判断完全错误。
修正后的函数代码
将case_when中的{{var_1}}替换为.data[[var_1]]即可解决问题,.data是tidyverse中用于明确指代当前数据框的代词,[[var_1]]可以通过字符串索引正确获取列值:
library(tidyverse) fun_1 <- function(df, var_1) { quants <- quantile(df[[var_1]], c(.25, .75)) tmp_1 <- df %>% select({{var_1}}) %>% mutate( expression = case_when( .data[[var_1]] >= quants[["75%"]] ~ sprintf( "High expression ( >= %.02f )", quants[["75%"]]), .data[[var_1]] <= quants[["25%"]] ~ sprintf( "Low expression ( <= %.02f )", quants[["25%"]]), .default = NA)) %>% filter(!is.na(expression)) tmp_1 } # 测试修正后的函数 fun_1(iris, "Sepal.Length")
修正后的运行结果
此时函数会正确筛选出Q1以下和Q3以上的数值,输出示例:
Sepal.Length expression 1 4.3 Low expression ( <= 5.10 ) 2 4.4 Low expression ( <= 5.10 ) 3 4.4 Low expression ( <= 5.10 ) ... 14 6.4 High expression ( >= 6.40 ) 15 6.5 High expression ( >= 6.40 ) 16 6.7 High expression ( >= 6.40 ) ...
内容的提问来源于stack exchange,提问作者Patrik da Silva Vital
相关产品推荐
相关产品推荐

