如何在R中执行leaps包子集选择对象$call中的lm公式?
如何用leaps返回的$call对象执行线性回归
嘿,这问题我之前也踩过坑!你说得没错,k$call只是存储了一个未执行的调用语句(call对象),不是已经拟合好的模型。要让它实际跑起来,得用R里的eval()函数来评估这个call对象。
具体步骤:
- 直接用
eval()包裹k$call就能执行这个线性回归命令,把结果存到变量里:lm.1 <- eval(k$call) - 执行完之后,
lm.1就是一个标准的lm对象了,你可以用summary(lm.1)查看回归结果,或者用predict(lm.1)做预测,和直接调用lm()得到的模型完全一样。
为什么要这么做?
leaps包在做子集选择时,重点是筛选最优变量组合,它只会记录下最优模型的公式和数据来源(也就是这个call对象),不会提前帮你拟合完整的线性模型。所以需要我们手动用eval()触发执行。
小验证:
你可以先检查下k$call的类型,确认它是call对象:
class(k$call) # 会输出 "call"
执行eval()之后,再看class(lm.1),就会变成"lm"啦。
内容的提问来源于stack exchange,提问作者Kevin Sun
相关产品推荐
相关产品推荐

