![](/img/trans.png)
[英]Why do calculated residuals differ between R functions `lm()` and `lm.fit()`
[英]Why would I assign the result of lm() to lm.fit?
来自“统计学习简介”,秒。 3.6.2,我得到这个代码(执行线性回归):
library(MASS)
library(ISLR2)
lm.fit =lm(medv~lstat ,data=Boston )
我的理解是lm.fit
是线性模型的基本拟合函数。 为什么我要用lm()
的结果覆盖它? 然后lm.fit
不再是一个函数,而是一个列表。 我不应该将lm()
的结果分配给一个新变量吗?
如建议的那样,作为答案发布。
最好不要覆盖已在加载包的命名空间中定义的变量,以避免不必要的副作用。 在这方面, var1
、 lm2
等形式的变量名通常是安全的选择。 Hadley Wickham 的风格指南推荐var_1
, lm_2
,尽管如果您在ESS中使用“智能下划线”(将_
更改为<-
),这些下划线可能会有点令人厌烦。
我们总是可以在分配给变量之前检查,例如
(if (!exists("lm.fit")) lm.fit <- lm(medv ~ lstat, data=ISLR2::Boston))
给出NULL
,表明lm.fit
已经存在。
分配lm.fit
不是一个主要的冒犯,因为lm
和函数lm.fit
仍然按预期工作,我们可以看到:
lm.fit <- lm(medv ~ lstat, data=ISLR2::Boston)
lm(medv ~ lstat, data=ISLR2::Boston)
### Manually adding an intercept term below to get the same results
lm.fit(x=cbind(rep(1, length(Boston$lstat)), Boston$lstat),
y=Boston$medv)$coefficients
也就是说, lm.fit
在调用时仍然是一个函数,因为它仍然定义在包stats
的命名空间中,如下所示:
getAnywhere(lm.fit)
给予
2 differing objects matching ‘lm.fit’ were found
in the following places
.GlobalEnv
package:stats
namespace:stats
Use [] to view one of them
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.