r - 在函数内部或外部运行 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,而在控制台中运行则不会。
为什么会发生这种情况,我该如何预防?
解决方案
当李哲源推荐使用 as.formula(paste()) 时,在李哲源的帮助下解决了这个问题
linear_regression <- function(dataframe, target) {
model = lm(as.formula(paste(target, '~ .')),data = dataframe)
return(model)
}
推荐阅读
- python - 由于“环境错误:[错误 13]:权限被拒绝:'usr/local/bin/f2py'”而无法安装软件包
- coldfusion - 无法确定 MIME 类型的文件错误仅适用于 post calll
- python - Kafka python消费者在并行线程中运行
- angularjs - Angularjs 允许为每个帖子的子评论更新单个(第一)行
- python - 如何一起或一次使用多个替换,Python
- sql - 获取计算列的总和
- symlink - 如何在 Perl 6 中获取符号链接的目标?
- javascript - Jquery/Javascript:尝试使用布尔值停止后续 if 语句
- javascript - JavaScript / C++ - 有没有办法使用代码限制程序的下游?
- swift - 如何在编码函数中修复这个 if/let 语句?