r - 将 `lm` 结果传递给 `stepAIC` 在脚本中工作,在函数内部失败

标签 r function

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/

相关文章:

返回实例变量的 c++ 方法可以访问变量中的数据但不能更改它,但编译时不会产生错误

r - 为条形图定义一个固定的宽度/高度,然后设置条形的绝对宽度和条形之间的绝对间距,以像素为单位

R:将因子转换为二进制矩阵的有效方法

r - 我可以使用 dplyr 对每组不同的大小进行子采样吗?

SQL从字符串中删除空格、非数字和第二个字符

python - 在 Python 中打印函数地址的奇怪行为

c++ - Rcpp错误,在mac上学习Rcpp和C++

r - ggplotly 与直方图 - 无法使其工作

c++ - 错误 : Label "foo" used but not defined

python - 编写函数以传递参数或参数元组的大多数 pythonic 方式