关于coef()函数与lm()报错的技术咨询:参数'y'缺失问题
问题分析与解决
首先来看你遇到的两个问题,核心原因很可能是你的R环境中lm函数被意外覆盖了,下面详细拆解:
1. 第一个报错的原因
你运行的代码:
sleep<-sleep lm1<-lm(extra~group, sleep) coef(lm(sleep$extra~sleep$group))
正常情况下,lm(sleep$extra~sleep$group)是合法的调用方式,但如果lm已经不是原来的线性回归函数(比如被你误赋值成了一个lm模型对象),那么再次调用lm(...)就会触发参数错误——此时lm是一个模型对象而非函数,它无法接收公式参数,从而抛出argument "y" is missing的报错。
2. 为什么之前正常的示例也报错了
你提到帮助文档里的示例:
x <- 1:5 coef(lm(c(1:3, 7, 6) ~ x))
之前能运行现在不行,进一步印证了lm函数被覆盖的猜测——当lm不再是内置函数时,任何调用lm(...)的代码都会失败。
解决方法
你只需要恢复默认的lm函数即可,有两种简单方式:
- 方法一:用
::明确指定调用stats包中的内置lm函数:# 修复第一个问题的代码 coef(stats::lm(sleep$extra~sleep$group)) # 修复示例代码 x <- 1:5 coef(stats::lm(c(1:3, 7, 6) ~ x)) - 方法二:如果确认是环境中的自定义
lm变量覆盖了函数,直接删除这个变量:rm(lm) # 之后再运行你的代码就正常了 coef(lm(sleep$extra~sleep$group))
额外建议
尽量不要用内置函数名(比如lm、coef、sleep等)作为变量名,否则很容易出现这类函数被覆盖的问题。比如你写的sleep<-sleep虽然没问题,但如果不小心写成lm<-lm(extra~group, sleep),就会把lm函数覆盖成模型对象,引发后续一系列报错。
内容的提问来源于stack exchange,提问作者Eun-Ji Kim
相关产品推荐
相关产品推荐

