R-如何将公式传递给函数中具有(df,glm(y~x))构造的

R-如何将公式传递给函数中具有(df,glm(y~x))构造的,r,r-mice,R,R Mice,我正在使用R中的mices包乘以插补一些缺失的数据。我需要能够指定一个公式,该公式通过函数内部的(df,glm(y~x))构造传递给。此with()结构是mice包使用的格式,用于在每个插补数据集中分别拟合回归模型 但是,我无法找出阻止我将公式作为参数成功传递的范围问题。以下是一个可复制的示例: library(mice) data(mtcars) mtcars[5, 5] <- NA # introduce a missing value to be imputed mtcars.i

我正在使用R中的
mices
包乘以插补一些缺失的数据。我需要能够指定一个公式,该公式通过函数内部的(df,glm(y~x))构造传递给
。此
with()
结构是
mice
包使用的格式,用于在每个插补数据集中分别拟合回归模型

但是,我无法找出阻止我将公式作为参数成功传递的范围问题。以下是一个可复制的示例:

library(mice)

data(mtcars)
mtcars[5, 5] <- NA # introduce a missing value to be imputed

mtcars.imp = mice(mtcars, m = 5)

# works correctly outside of function
with(mtcars.imp, glm(mpg ~ cyl))

fit_model_mi = function(formula) {
  with(mtcars.imp, glm(formula))
}

# doesn't work when trying to pass formula into function   
fit_model_mi("mpg ~ cyl")
库(鼠标)
数据(mtcars)

mtcars[5,5]尝试将公式包装到as.formula中

fit_model_mi = function(formula) {
    with(mtcars.imp, glm(as.formula(formula)) )
}
似乎有效:

> fit_model_mi("mpg ~ cyl")
call :
with.mids(data = mtcars.imp, expr = glm(as.formula(formula)))

call1 :
mice(data = mtcars, m = 5)

nmis :
 mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
   0    0    0    0    1    0    0    0    0    0    0 

analyses :
[[1]]

Call:  glm(formula = as.formula(formula))

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  

Degrees of Freedom: 31 Total (i.e. Null);  30 Residual
Null Deviance:      1126 
Residual Deviance: 308.3    AIC: 169.3

您还可以通过

attach(mtcars)
结果显示

fit_model_mi("mpg ~ cyl")
call :
with.mids(data = mtcars.imp, expr = glm(formula))

call1 :
mice(data = mtcars, m = 5)

nmis :
 mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
   0    0    0    0    1    0    0    0    0    0    0 

analyses :
[[1]]

Call:  glm(formula = formula)

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  

Degrees of Freedom: 31 Total (i.e. Null);  30 Residual
Null Deviance:      1126 
Residual Deviance: 308.3    AIC: 169.3
“mpg~cyl”
不是公式对象。它只是一个字符值,而且
with
功能只能在控制台级别安全使用。特别建议不要在函数内部使用它。