Chain subset conditions
Chain subset conditions
chainsubset(..., out.vars)
... |
Logical conditions to be chained. |
out.vars |
character. Variables not in data.frame, only needed if you use variables which
are not in the frame. If |
A set of logical conditions are chained, not and'ed. That is, each argument to
chainsubset
is used as a filter to create a smaller dataset. Each subsequent
argument filters further.
For independent conditions this will be the same as and'ing them. I.e.
chainsubset(x < 0 , y < 0)
will yield the same subset as (x < 0) & (y < 0)
.
However, for aggregate filters like chainsubset(x < mean(y), x > mean(y))
we first find all the observations with x < mean(y)
, then among these we
find the ones with x > mean(y)
. The last mean(y)
is now conditional on
x < mean(y)
.
Expression that can be eval
'ed to yield a logical subset mask.
Some trickery is done to make this work directly in the subset argument of functions like
felm()
and lm()
. It might possibly fail with an error message in some situations.
If this happens, it should be done in two steps: ss <- eval(chainsubset(...),data);
lm(...,data=data, subset=ss)
. In particular, the arguments are taken literally,
constructions like function(...) {chainsubset(...)}
or a <- quote(x < y); chainsubset(a)
do
not work, but do.call(chainsubset,list(a))
does.
set.seed(48) N <- 10000 dat <- data.frame(y=rnorm(N), x=rnorm(N)) # It's not the same as and'ing the conditions: felm(y ~ x,data=dat,subset=chainsubset(x < mean(y), y < 2*mean(x))) felm(y ~ x,data=dat,subset=chainsubset(y < 2*mean(x), x < mean(y))) felm(y ~ x,data=dat,subset=(x < mean(y)) & (y < 2*mean(x))) lm(y ~ x, data=dat, subset=chainsubset(x < mean(y), x > mean(y)))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.