Emulate lm.
myFun <-
function(formula, data, na.action, id, ...){
mf <- match.call(expand.dots = FALSE)
m <- match(c("formula", "data", "id", "na.action"), names(mf), 0L)
mf <- mf[c(1L, m)]
mf$drop.unused.levels <- TRUE
mf[[1L]] <- as.name("model.frame")
mf <- eval(mf, parent.frame())
mf
}
myFun(score ~ grade, qqq, id=idVar)
HTH,
Chuck
On Wed, 21 Oct 2009, Doran, Harold wrote:
Suppose I have the following function
myFun <- function(formula, data){
f <- formula(formula)
dat <- model.frame(f, data)
dat
}
Applying it with this sample data yields a new dataframe:
qqq <- data.frame(grade = c(3, NA, 3,4,5,5,4,3), score = rnorm(8), idVar =
c(1:8))
dat <- myFun(score ~ grade, qqq)
However, what I would like is for the resulting dataframe (dat) to include as a
column idVar. Naively, I could do
dat <- myFun(score ~ grade + idVar, qqq)
This gives what I'm after in terms of the resulting data, but doesn't make
sense within the context of the model I am working on since idVar is not one of
the conditioning variables used, it has a different purpose altogether. So, I
was thinking another way is to attach it somehow afterwards. Something like:
myFun <- function(formula, data, id, na.action){
f <- formula(formula)
idVar <- data[, id]
dat <- model.frame(f, data, na.action = na.action)
dat[, id] <- idVar
dat
}
myFun(score ~ grade, qqq, id = 'idVar', na.action = NULL)
Of course, I intentionally use na.action = NULL here because the following
occurs, of course
myFun(score ~ grade, qqq, id = 'idVar', na.action = na.omit)
Error in `[<-.data.frame`(`*tmp*`, , id, value = 1:8) :
replacement has 8 rows, data has 7
I see a few workarounds, but I am certain there is a cleaner way to accomplish
this.
Harold
sessionInfo()
R version 2.9.0 (2009-04-17)
i386-pc-mingw32
locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
States.1252;LC_MONETARY=English_United
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
attached base packages:
[1] splines stats graphics grDevices utils datasets methods base
other attached packages:
[1] lme4_0.999375-28 Matrix_0.999375-25 lattice_0.17-22 xtable_1.5-5
adapt_1.0-4 MiscPsycho_1.4
[7] statmod_1.3.8
loaded via a namespace (and not attached):
[1] grid_2.9.0 tools_2.9.0
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Charles C. Berry (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.