繁体   English   中英

为什么要将 lm() 的结果分配给 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()的结果分配给一个新变量吗?

如建议的那样,作为答案发布。

最好不要覆盖已在加载包的命名空间中定义的变量,以避免不必要的副作用。 在这方面, var1lm2等形式的变量名通常是安全的选择。 Hadley Wickham 的风格指南推荐var_1lm_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM