[Rd] challenge: using 'subset = <computed>' inside function ..
Bjørn-Helge Mevik
bhs2 at mevik.net
Sat Nov 19 11:03:47 CET 2005
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
More information about the R-devel
mailing list