chainsubset | R Documentation |
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)))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.