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

R语言lm函数报错:object 'deaths' not found 求解

解决自定义线性回归函数的"object not found"报错问题

这个报错的核心原因是函数内部无法正确识别你传入的列名——你直接传deaths和cases时,R会尝试在函数的局部环境里找这两个独立对象,但它们其实是Rona_2020数据框里的列,自然找不到。结合moderndive包的使用习惯,给你两种实用的修复方案:

方案1:用整洁评估(Tidy Evaluation)直接传列名

这种方法最符合tidyverse风格,不需要加引号,用{{}}语法帮函数捕获传入的列名,让lm能在指定数据框里定位到对应列:

# 先确保加载了正确的包(注意是moderndive不是moderndrive)
library(moderndive)

score_model_Fxn <- function(y, x, data = Rona_2020){
  # 用{{}}包裹变量,告诉R去data里找对应的列
  score_mod <- lm({{y}} ~ {{x}}, data = data)
  Reg_Table <- get_regression_table(score_mod)
  # 不要用paste打印表格,直接输出更清晰
  cat("回归结果表格:\n")
  print(Reg_Table)
}

# 直接传列名调用即可
score_model_Fxn(deaths, cases)

方案2:传字符串形式的列名(更灵活)

如果习惯用字符串指定列名(比如需要动态生成列名时),可以用reformulate()构造回归公式:

library(moderndive)

score_model_Fxn <- function(y_col, x_col, data = Rona_2020){
  # 用字符串构造y ~ x的公式
  reg_formula <- reformulate(x_col, response = y_col)
  score_mod <- lm(reg_formula, data = data)
  Reg_Table <- get_regression_table(score_mod)
  cat("回归结果表格:\n")
  print(Reg_Table)
}

# 调用时传带引号的列名字符串
score_model_Fxn("deaths", "cases")

为什么原来的代码会报错?

  1. 你写的lm(y ~ x, data = Rona_2020)中,y和x是函数的参数,但R会把它们当作独立对象去查找,而不是Rona_2020里的列,所以提示找不到deaths;
  2. 用paste()输出表格会把结构化的表格转换成混乱的字符串,完全失去可读性,改成直接print()表格才是正确做法。

内容的提问来源于stack exchange,提问作者Dezzy7model

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:52:48