Rev 75453 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/stats/man/formula.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2019 R Core Team% Distributed under GPL 2 or later\name{formula}\alias{formula}\alias{formula.default}\alias{formula.formula}\alias{formula.terms}\alias{formula.data.frame}\alias{DF2formula}\alias{as.formula}\alias{print.formula}\alias{[.formula}\title{Model Formulae}\usage{formula(x, \dots)DF2formula(x, env = parent.frame())as.formula(object, env = parent.frame())\method{print}{formula}(x, showEnv = !identical(e, .GlobalEnv), \dots)}\description{The generic function \code{formula} and its specific methods provide away of extracting formulae which have been included in other objects.\code{as.formula} is almost identical, additionally preservingattributes when \code{object} already inherits from\code{"formula"}.}\arguments{\item{x, object}{\R object, for \code{DF2formula()} a \code{\link{data.frame}}.}\item{\dots}{further arguments passed to or from other methods.}\item{env}{the environment to associate with the result, if notalready a formula.}\item{showEnv}{logical indicating if the environment should be printedas well.}}\details{The models fit by, e.g., the \code{\link{lm}} and \code{\link{glm}} functionsare specified in a compact symbolic form.The \code{~} operator is basic in the formation of such models.An expression of the form \code{y ~ model} is interpretedas a specification that the response \code{y} is modelledby a linear predictor specified symbolically by \code{model}.Such a model consists of a series of terms separatedby \code{+} operators.The terms themselves consist of variable and factornames separated by \code{:} operators.Such a term is interpreted as the interaction ofall the variables and factors appearing in the term.In addition to \code{+} and \code{:}, a number of other operators areuseful in model formulae. The \code{*} operator denotes factorcrossing: \code{a*b} interpreted as \code{a+b+a:b}. The \code{^}operator indicates crossing to the specified degree. For example\code{(a+b+c)^2} is identical to \code{(a+b+c)*(a+b+c)} which in turnexpands to a formula containing the main effects for \code{a},\code{b} and \code{c} together with their second-order interactions.The \code{\%in\%} operator indicates that the terms on its left arenested within those on the right. For example \code{a + b \%in\% a}expands to the formula \code{a + a:b}. The \code{-} operator removesthe specified terms, so that \code{(a+b+c)^2 - a:b} is identical to\code{a + b + c + b:c + a:c}. It can also used to remove theintercept term: when fitting a linear model \code{y ~ x - 1} specifiesa line through the origin. A model with no intercept can be alsospecified as \code{y ~ x + 0} or \code{y ~ 0 + x}.While formulae usually involve just variable and factornames, they can also involve arithmetic expressions.The formula \code{log(y) ~ a + log(x)} is quite legal.When such arithmetic expressions involveoperators which are also used symbolicallyin model formulae, there can be confusion betweenarithmetic and symbolic operator use.To avoid this confusion, the function \code{\link{I}()}can be used to bracket those portions of a modelformula where the operators are used in theirarithmetic sense. For example, in the formula\code{y ~ a + I(b+c)}, the term \code{b+c} is to beinterpreted as the sum of \code{b} and \code{c}.Variable names can be quoted by backticks \code{`like this`} informulae, although there is no guarantee that all code using formulaewill accept such non-syntactic names.Most model-fitting functions accept formulae with right-hand-sideincluding the function \code{\link{offset}} to indicate terms with afixed coefficient of one. Some functions accept other\sQuote{specials} such as \code{strata} or \code{cluster} (see the\code{specials} argument of \code{\link{terms.formula})}.There are two special interpretations of \code{.} in a formula. Theusual one is in the context of a \code{data} argument of modelfitting functions and means \sQuote{all columns not otherwise in theformula}: see \code{\link{terms.formula}}. In the context of\code{\link{update.formula}}, \bold{only}, it means \sQuote{what waspreviously in this part of the formula}.When \code{formula} is called on a fitted model object, either aspecific method is used (such as that for class \code{"nls"}) or thedefault method. The default first looks for a \code{"formula"}component of the object (and evaluates it), then a \code{"terms"}component, then a \code{formula} parameter of the call (and evaluatesits value) and finally a \code{"formula"} attribute.There is a \code{formula} method for data frames. When there's\code{"terms"} attribute with a formula, e.g., for a\code{\link{model.frame}()}, that formula is returned. If you'd like theprevious (\R \eqn{\le}{<=} 3.5.x) behavior, use the auxiliary\code{DF2formula()} which does not consider a \code{"terms"} attribute.Otherwise, ifthere is onlyone column this forms the RHS with an empty LHS. For more columns,the first column is the LHS of the formula and the remaining columnsseparated by \code{+} form the RHS.}\section{Environments}{A formula object has an associated environment, andthis environment (rather than the parentenvironment) is used by \code{\link{model.frame}} to evaluate variablesthat are not found in the supplied \code{data} argument.Formulas created with the \code{~} operator use theenvironment in which they were created. Formulas created with\code{as.formula} will use the \code{env} argument for theirenvironment.}\value{All the functions above produce an object of class \code{"formula"}which contains a symbolic model formula.}\references{Chambers, J. M. and Hastie, T. J. (1992)\emph{Statistical models.}Chapter 2 of \emph{Statistical Models in S}eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.}\seealso{\code{\link{I}}, \code{\link{offset}}.For formula manipulation: \code{\link{terms}}, and \code{\link{all.vars}};for typical use: \code{\link{lm}}, \code{\link{glm}}, and\code{\link{coplot}}.}\examples{class(fo <- y ~ x1*x2) # "formula"fotypeof(fo) # R internal : "language"terms(fo)environment(fo)environment(as.formula("y ~ x"))environment(as.formula("y ~ x", env = new.env()))## Create a formula for a model with a large number of variables:xnam <- paste0("x", 1:25)(fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))}\keyword{models}