Escopo em funções de rede personalizadas (argumento de grupo)

Por favor, considere esta função:

tf <- function(formula = NULL, data = NULL, groups = NULL) {

    grv <- eval(substitute(groups), data, environment(formula)) # the values
    grn <- as.character(match.call()$groups) # the name
    gr <- match.call()$groups # unquoted name

    p <- xyplot(formula, data, # draws the data but not in groups
# Try these options:
#   p <- xyplot(formula, data, groups, # can't find 'cat2' 
#   p <- xyplot(formula, data, groups = data[,grn], # can't fine grn
#   p <- xyplot(formula, data, groups = grv, # can't find grv
        panel = function(x, y) {
            panel.stripplot(x, y, jitter.data = TRUE, pch = 20)
            }
            )
    p
    }

Com o qual você pode correr:

tf(formula = mpg~vs, groups = am, data = mtcars)

O que estou fazendo errado ao passar ogroups argumento paraxyplot - por que não pode ser encontrado? Eu não consigo descobrir como quer ogroup em formação. Obrigado.

Atualizar:

A resposta do @ agstudy é muito útil, mas se eu adicionar a função do painel como no exemplo original, os grupos ainda não serão reconhecidos (nenhum agrupamento, mas nenhum erro ocorrerá):

tf <- function(formula = NULL, data = NULL, groups = NULL) {
    ll <- as.list(match.call(expand.dots = FALSE)[-1])
    p <- xyplot(as.formula(ll$formula), 
              data = eval(ll$data), 
              groups = eval(ll$groups),
                panel = function(x, y) {
                panel.stripplot(x, y, jitter.data = TRUE, pch = 20)
                }
                )
    p
    }

Algo ainda está faltando ... Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion