R语言编写回归函数出现0 (non-NA) cases报错如何解决
报错原因
- 列名判断逻辑错误:
predict==IDRTOTALJOURNALS是直接对向量值做比较,不是判断预测变量的列名是否为IDRTOTALJOURNALS,同时还会触发向量比较的长度不一致警告。 - 自建数据集列名不匹配:函数内自己构造的
data.frame(response,predict)的列名默认是response和predict,不存在IDRTOTALJOURNALS列,执行full_data$IDRTOTALJOURNALS会返回NULL,筛选条件NULL>5全为FALSE,最终得到0行的数据集,拟合线性模型时就会触发0 (non-NA) cases报错。 - 样本对应关系错误:直接把传入的两个向量拼接为数据集,完全脱离了原数据集的样本对应逻辑,就算没有报错,拟合结果也是错误的。
修复方案
如果要保留你原有传入不带引号列名的调用习惯,可以用deparse(substitute())捕获传入的列名,基于原全局数据集full_data做操作,修复后代码如下:
regression <- function(response, predict) { # 捕获传入的列名转为字符串 response_col <- deparse(substitute(response)) predict_col <- deparse(substitute(predict)) # 提取原数据集的对应列,保留样本对应关系 used_df <- full_data[, c(response_col, predict_col)] # 按逻辑筛选样本 if (predict_col == "IDRTOTALJOURNALS") { used_df <- subset(used_df, used_df[[predict_col]] > 5) } # 构造拟合公式 fit_formula <- as.formula(paste0(response_col, "~", predict_col)) model <- lm(fit_formula, data = used_df) return(summary(model)) }
调用方式和你之前的写法完全一致:
# 调用示例 regression(STIRLING, MEANWEXP) regression(STIRLING, IDRTOTALJOURNALS)
内容的提问来源于stack exchange,提问作者shokoufa zeynali
相关产品推荐
相关产品推荐

