blob: 3215abb8e797a0c2ab477767400c4f9b8fff4d9d [file] [log] [blame]
# File src/library/stats/R/expand.model.frame.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 1995-2012 The R Core Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# A copy of the GNU General Public License is available at
# https://www.R-project.org/Licenses/
expand.model.frame <- function(model, extras,
envir=environment(formula(model)),
na.expand=FALSE)
{
## don't use model$call$formula -- it might be a variable name
f <- formula(model)
data <- eval(model$call$data, envir)
# new formula (there must be a better way...)
ff <- foo ~ bar + baz
if (is.call(extras))
gg <- extras
else
gg <- parse(text=paste("~", paste(extras, collapse="+")))[[1L]]
ff[[2L]] <- f[[2L]]
ff[[3L]][[2L]] <- f[[3L]]
ff[[3L]][[3L]] <- gg[[2L]]
if (!na.expand){
naa <- model$call$na.action
subset <- model$call$subset
rval <- eval(call("model.frame",ff, data = data, subset = subset,
na.action = naa),envir )
} else {
subset <- model$call$subset
rval <- eval(call("model.frame",ff, data = data, subset = subset,
na.action = I), envir)
oldmf <- model.frame(model)
keep <- match(rownames(oldmf), rownames(rval))
rval <- rval[keep, ]
class(rval) <- "data.frame" # drop "AsIs"
}
return(rval)
}