% File src/library/stats/man/update.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2011 R Core Team
% Distributed under GPL 2 or later

\name{update}
\title{Update and Re-fit a Model Call}
\alias{update}
\alias{update.default}
\alias{getCall}
\alias{getCall.default}
\usage{
update(object, \dots)
\method{update}{default}(object, formula., \dots, evaluate = TRUE)

getCall(x, \dots)
}
\arguments{
 \item{object, x}{An existing fit from a model function such as \code{lm},
   \code{glm} and many others.}
 \item{formula.}{Changes to the formula -- see \code{update.formula} for
   details.}
 \item{\dots}{Additional arguments to the call, or arguments with
   changed values. Use \code{name = NULL} to remove the argument \code{name}.}
 \item{evaluate}{If true evaluate the new call else return the call.}
}
\description{
  \code{update} will update and (by default) re-fit a model.  It does this
  by extracting the call stored in the object, updating the call and (by
  default) evaluating that call.  Sometimes it is useful to call
  \code{update} with only one argument, for example if the data frame has
  been corrected.

  \dQuote{Extracting the call} in \code{update()} and similar functions
  uses \code{getCall()} which itself is a (S3) generic function with a
  default method that simply gets \code{x$call}.

  Because of this, \code{update()} will often work (via its default
  method) on new model classes, either automatically, or by providing a
  simple \code{getCall()} method for that class.
}
\value{
  If \code{evaluate = TRUE} the fitted object, otherwise the updated call.
}
\seealso{
  \code{\link{update.formula}}
}
\references{
  \bibshow{R:Chambers:1992:c4}}
\examples{
oldcon <- options(contrasts = c("contr.treatment", "contr.poly"))
## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
## Page 9: Plant Weight Data.
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl", "Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
lm.D9
summary(lm.D90 <- update(lm.D9, . ~ . - 1))
options(contrasts = c("contr.helmert", "contr.poly"))
update(lm.D9)
getCall(lm.D90)  # "through the origin"

options(oldcon)
}
\keyword{models}
