Re: [Rd] challenge: using 'subset = <computed>' inside function ..

From: Bjørn-Helge Mevik <bhs2_at_mevik.net>
Date: Sat 19 Nov 2005 - 10:03:47 GMT

Hmm.. Maybe I'm overlooking something, but why not use do.call()? For instance

tst <- function(formula, data, na.action = na.omit) {

    stopifnot(inherits(formula,"formula"), length(formula) == 3)

    ## I want to fit a model to those observations that have 'Y > 0'
    ## where 'Y' is the left-hand-side (LHS)
    ## The really natural problem is using 'subset'; since I want to keep 'data' intact
    ## It's really  lm(), glm(), gam(), ... but the problem is with model.frame:

    cat("subsetting expression: ")
    print(substitute(Y > 0, list(Y = formula[[2]])))# is perfect     YY <- formula[[2]]
    cat(" or "); print(bquote(.(YY) > 0))

    mf <- do.call("model.frame", list(formula = formula, data = data,

                                      subset = bquote(.(YY) > 0),
                                      na.action = na.action))
    mf
}

It seems to work for me:

> mydata <- data.frame(y = rep(c(-1, 1), each = 5), x = rnorm(10))
> tst(y ~ x, data = mydata)
subsetting expression: y > 0
  or y > 0
   y x

6  1  0.9568283
7  1  0.1166081
8  1 -0.9592458
9  1 -0.0974119
10 1  0.2217222


-- 
Bjørn-Helge Mevik

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sat Nov 19 21:15:16 2005

This archive was generated by hypermail 2.1.8 : Mon 21 Nov 2005 - 02:21:09 GMT