首页 > 解决方案 > 在函数内部或外部运行 lm() 时结果不同

问题描述

功能:

linear_regression <- function(dataframe, target) {

  model = lm(target ~ .,data = dataframe)

  return(model)

}

我正在使用名为 test2 的数据框,目标列称为DP_POWER- DP_POWER

在外面运行:

lm(test2$`DP_POWER- DP_POWER` ~ .,data = test2)

结果是

Call:
lm(formula = test2$`DP_POWER- DP_POWER` ~ ., data = test2)

Coefficients:
                                  (Intercept)  `OTHER VARIABLE`  
                                     1154.789                                          1.134  

通过调用在函数内部运行它:

linear_regression(dataframe = test2, target = test2$`DP_POWER- DP_POWER`)

返回

Call:
lm(formula = target ~ ., data = dataframe)

Coefficients:
                                  (Intercept)                           `DP_POWER- DP_POWER`  
                                   -1.807e-10                                      1.000e+00  
`OTHER VARIABLE`  
                                   -1.552e-15  

如您所见,出于某种原因运行我的用户制作函数会计算 DP_POWER-DP_POWER,而在控制台中运行则不会。

为什么会发生这种情况,我该如何预防?

标签: r

解决方案


当李哲源推荐使用 as.formula(paste()) 时,在李哲源的帮助下解决了这个问题

linear_regression <- function(dataframe, target) {

  model = lm(as.formula(paste(target, '~ .')),data = dataframe)

  return(model)

}

推荐阅读