MASS::stepAIC
函数需要一个 lm
结果作为参数并逐步回归以找到“最佳”模型。以下代码非常简单且有效:
library(MASS)
data("mtcars")
lm1 = lm(mpg ~ ., mtcars)
step1 = stepAIC(lm1, direction = "both", trace = FALSE)
我试图把它放在一个函数中。最终我想做更多的事情,但是当包裹在一个函数中时,我什至无法让这两行代码工作:
fit_model = function(formula, data) {
full_model = lm(formula = formula, data = data)
step_model = stepAIC(full_model, direction = "both", trace = FALSE)
return(step_model)
}
step2 = fit_model(mpg ~ ., mtcars)
Error in eval(predvars, data, env) :
invalid 'envir' argument of type 'closure'
我在跑:
R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 19.1
最佳答案
这是你的罪魁祸首(在 fit_model
函数中)。请注意创建公式的环境。
Browse[1]> str(formula)
Class 'formula' language mpg ~ .
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
你能做的也许就是在新环境中强行
fit_model = function(formula, data) {
environment(formula) <- new.env()
full_model = lm(formula = formula, data = data)
step_model = stepAIC(full_model, direction = "both", trace = FALSE)
return(step_model)
}
> step2
Call:
lm(formula = mpg ~ wt + qsec + am, data = data)
Coefficients:
(Intercept) wt qsec am
9.618 -3.917 1.226 2.936
关于r - 将 `lm` 结果传递给 `stepAIC` 在脚本中工作,在函数内部失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61507704/