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.