| % File src/library/stats/man/checkMFClasses.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2019 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{.checkMFClasses} |
| \alias{.checkMFClasses} |
| \alias{.MFclass} |
| \alias{.getXlevels} |
| \title{Functions to Check the Type of Variables passed to Model Frames} |
| \description{ |
| \code{.checkMFClasses} checks if the variables used in a predict |
| method agree in type with those used for fitting. |
| |
| \code{.MFclass} categorizes variables for this purpose. |
| |
| \code{.getXlevels()} extracts factor levels from \code{\link{factor}} or |
| \code{\link{character}} variables. |
| } |
| \usage{ |
| .checkMFClasses(cl, m, ordNotOK = FALSE) |
| .MFclass(x) |
| .getXlevels(Terms, m) |
| } |
| \arguments{ |
| \item{cl}{a character vector of class descriptions to match.} |
| \item{m}{a model frame (\code{\link{model.frame}()} result).} |
| \item{x}{any \R object.} |
| \item{ordNotOK}{logical: are ordered factors different?} |
| \item{Terms}{a \code{terms} object (\code{\link{terms.object}}).} |
| } |
| \details{ |
| For applications involving \code{\link{model.matrix}()} such as linear models |
| we do not need to differentiate between \emph{ordered} factors and factors as |
| although these affect the coding, the coding used in the fit is |
| already recorded and imposed during prediction. However, other |
| applications may treat ordered factors differently: |
| \code{\link[rpart]{rpart}} does, for example. |
| } |
| \value{ |
| \code{.checkMFClasses()} checks and either signals an error calling |
| \code{\link{stop}()} or returns \code{\link{NULL}} invisibly. |
| |
| \code{.MFclass()} returns a character string, one of \code{"logical"}, |
| \code{"ordered"}, \code{"factor"}, \code{"numeric"}, \code{"nmatrix.*"} |
| (a numeric matrix with a number of columns appended) or \code{"other"}. |
| |
| \code{.getXlevels} returns a named \code{\link{list}} of character |
| vectors, possibly empty, or \code{\link{NULL}}. |
| } |
| \examples{ |
| sapply(warpbreaks, .MFclass) # "numeric" plus 2 x "factor" |
| sapply(iris, .MFclass) # 4 x "numeric" plus "factor" |
| |
| mf <- model.frame(Sepal.Width ~ Species, iris) |
| mc <- model.frame(Sepal.Width ~ Sepal.Length, iris) |
| |
| .checkMFClasses("numeric", mc) # nothing else |
| .checkMFClasses(c("numeric", "factor"), mf) |
| |
| ## simple .getXlevels() cases : |
| (xl <- .getXlevels(terms(mf), mf)) # a list with one entry " $ Species" with 3 levels: |
| stopifnot(exprs = { |
| identical(xl$Species, levels(iris$Species)) |
| identical(.getXlevels(terms(mc), mc), xl[0]) # a empty named list, as no factors |
| is.null(.getXlevels(terms(x~x), list(x=1))) |
| }) |
| } |
| \keyword{utilities} |