On Thu, Dec 11, 2008 at 2:55 AM, Thomas Zumbrunn <t.zumbr...@unibas.ch> wrote: > I'm trying to use a lattice function within a function and have problems > passing the "groups" argument properly. Let's say I have a data frame > > d <- data.frame(x = rnorm(100), y = c("a", "b")) > > and want to plot variable x in a densityplot, grouped by the variable y, then > I would do something like > > densityplot(~ x, d, groups = y) > > If however I wanted to call the function "densityplot" within a function and > pass the "groups" argument as an argument of that function, how would I have > to proceed? It is not as straightforward as > > f <- function(data, groupvar) { > densityplot(~ x, data, groups = groupvar) > } > > probably because the lattice function "densityplot.formula" preprocesses > the "groups" argument with
Yes, that's the price of non-standard evaluation. > groups <- eval(substitute(groups), data, environment(formula)) > > It there a way how I could pass the "groups" argument in the function "f"? The obvious solution is to evaluate 'groupvar' yourself: f <- function(data, groupvar) { groupvar <- eval(substitute(groupvar), data, parent.frame()) densityplot(~ x, data, groups = groupvar) } A more general solution (where 'groupvar' may be missing) is to use match.call() etc. (e.g., see lattice:::dotplot.formula) -Deepayan ______________________________________________ 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.