\HeaderA{terms.object}{Description of Terms Objects}{terms.object}
\keyword{models}{terms.object}
\begin{Description}\relax
An object of class \code{\LinkA{terms}{terms}} holds information about a
model.  Usually the model was specified in terms of a
\code{\LinkA{formula}{formula}} and that formula was used to determine the terms
object.
\end{Description}
\begin{Value}
The object itself is simply the formula supplied to the call of
\code{\LinkA{terms.formula}{terms.formula}}.  The object has a number of attributes
and they are used to construct the model frame:

\begin{ldescription}
\item[\code{factors}] A matrix of variables by terms showing which variables
appear in which terms.  The entries are 0 if the variable does not
occur in the term, 1 if it does occur and should be coded by
contrasts, and 2 if it occurs and should be coded via dummy
variables for all levels (as when an intercept or lower-order term
is missing).  If there are no terms other than an intercept and offsets,
this is \code{numeric(0)}.
\item[\code{term.labels}] A character vector containing the labels for each
of the terms in the model, except for offsets.  Non-syntactic names
will be quoted by backticks.  Note that these are after possible
re-ordering (unless argument \code{keep.order} was false).
\item[\code{variables}] A call to \code{list} of the variables in the model.
\item[\code{intercept}] Either 0, indicating no intercept is to be fit, or 1
indicating that an intercept is to be fit.
\item[\code{order}] A vector of the same length as \code{term.labels}
indicating the order of interaction for each term.
\item[\code{response}] The index of the variable (in variables) of the
response (the left hand side of the formula). Zero, if there is no
response.
\item[\code{offset}] If the model contains \code{\LinkA{offset}{offset}} terms there
is an \code{offset} attribute indicating which variable(s) are offsets
\item[\code{specials}] If a \code{specials} argument was given to
\code{\LinkA{terms.formula}{terms.formula}} there is a \code{specials} attribute, a
list of vectors (one for each specified special function) giving
numeric indices of the arguments of the list returned as the
\code{variables} attribute which contain these special functions.
\item[\code{dataClasses}] optional. A named character vector giving the classes
(as given by \code{\LinkA{.MFclass}{.MFclass}}) of the variables used in a fit.
\end{ldescription}


The object has class \code{c("terms", "formula")}.
\end{Value}
\begin{Note}\relax
These objects are different from those found in S.  In particular
there is no \code{formula} attribute, instead the object is itself a
formula.  Thus, the mode of a terms object is different as well. 

Examples of the \code{specials} argument can be seen in the
\code{\LinkA{aov}{aov}} and \code{\LinkA{coxph}{coxph}} functions.
\end{Note}
\begin{SeeAlso}\relax
\code{\LinkA{terms}{terms}}, \code{\LinkA{formula}{formula}}.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
## use of specials (as used for gam() in packages mgcv and gam)
(tf <- terms(y ~ x + x:z + s(x), specials = "s"))
## Note that the "factors" attribute has variables as row names
## and term labels as column names, both as character vectors. 
attr(tf, "specials")    # index 's' variable(s)
rownames(attr(tf, "factors"))[attr(tf, "specials")$s]

## we can keep the order by
terms(y ~ x + x:z + s(x), specials = "s", keep.order = TRUE)
\end{ExampleCode}
\end{Examples}

