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")
为什么原来的代码会报错?
- 你写的
lm(y ~ x, data = Rona_2020)中,y和x是函数的参数,但R会把它们当作独立对象去查找,而不是Rona_2020里的列,所以提示找不到deaths; - 用
paste()输出表格会把结构化的表格转换成混乱的字符串,完全失去可读性,改成直接print()表格才是正确做法。
内容的提问来源于stack exchange,提问作者Dezzy7model
相关产品推荐
相关产品推荐

