将glm模型传递给自定义函数

时间:2017-06-13 17:48:14

标签: r function glm

我想将glm模型传递给自定义函数,但会遇到错误消息

  

eval(expr,envir,enclos)中的错误:object ... not found

我想传递拟合的glm模型,并使用相同的公式,族,数据和权重作为输入以适应新模型。我已尝试使用下面的代码(如果我只设置glmModel = testModel并在手动中运行代码中,则可以正常工作)。出了什么问题?

glmPassing <- function(glmModel){
   weightsTest = glmModel$weights
   glmTest = glm(formula = glmModel$formula, family = glmModel$family, data = glmModel$data, weights = weightsTest)
   summary(glmTest)
} 

test = iris
testModel = glm(Sepal.Length ~ Sepal.Width + I(Sepal.Width^2), family = gaussian, data = test, weights = Petal.Width)
glmPassing(testModel) 

我已经将权重分离为一个新变量,因为我发现了导致错误消息的原因。使用上面的代码,错误消息是

  

eval(expr,envir,enclos)中的错误:object&#39; weightsTest&#39;找不到

谢谢!

1 个答案:

答案 0 :(得分:0)

使用此

glmPassing <- function(glmModel){
 weightsTest = glmModel$weights
 glmTest = do.call("glm", list(formula = glmModel$formula, family = glmModel$family, data = quote(glmModel$data), weights = weightsTest))
 summary(glmTest)
 }

通常,do.call函数有助于摆脱环境问题。

  

我正在实施自己的交叉验证。以上示例非常简洁,以说明问题,并尝试重做完全相同的glm分析。感谢您的参与(已经回答)。

感谢。但正如弗里克先生所说,我也认为update()是一个方便的设施。 cv.glm()包中的boot函数只是用它来进行交叉验证。