You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:54:03