R语言自定义函数运行logistic回归报object 'X0' not found错如何解决
报错原因
- R的模型公式采用非标准求值逻辑,你在函数内写死
extry~a时,glm建模时只会在建模数据集、函数内部环境里搜索名为a的变量,不会自动把调用时传入的X0替换到公式的变量位置,自然找不到对应字段。 - 你调用函数时直接写
new.function(X0),R会优先在全局环境搜索名为X0的独立对象,不会默认把它识别为数据集里的列名,进一步触发对象不存在的报错。 - 原代码取AUC的写法也有疏漏:
performance返回的是S4对象,不提取对应槽位的话拿不到实际的AUC数值。
修复方案
核心是动态拼接模型公式,传参时传入列名字符串即可,修复后可直接支持多参数批量运行:
# 先加载依赖的ROCR包 library(ROCR) run_lr <- function(var_name) { # 动态生成对应变量的建模公式 lr_formula <- as.formula(paste0("extry ~ ", var_name)) # 拟合logistic回归模型 model <- glm(lr_formula, family = binomial("logit"), data = train_df) # 输出测试集预测概率 pred_prob <- predict(model, test_df, type = "response") # 计算AUC数值 pred_obj <- prediction(pred_prob, test_df$extry) auc_value <- performance(pred_obj, measure = "auc")@y.values[[1]] return(list("AUC" = auc_value)) } # 单变量调用示例,传入列名字符串即可 les <- run_lr("X0") # 批量跑多组参数示例,比如要跑X0、X1、X2三个自变量 target_vars <- c("X0", "X1", "X2") batch_result <- lapply(target_vars, run_lr) names(batch_result) <- target_vars
如果后续需要新增精确率、召回率、混淆矩阵等其他评估指标,直接在函数内部补充对应计算逻辑即可,批量运行的代码不需要调整。
内容的提问来源于stack exchange,提问作者lola
相关产品推荐
相关产品推荐

