[R] Constructing an environment from a data.frame
Duncan Murdoch
dmurdoch at pair.com
Tue Feb 10 20:56:01 CET 2004
Code like
df <- data.frame(x=1:10)
y <- 20:29
eval(quote(x+y), env=df)
does what you might expect: it looks for x and y in the data.frame,
and when it doesn't find y there, it looks in the parent environment.
However, sometimes I'd like to construct a single environment out of
df, so that I can pass it to nested functions and get the same
behaviour. Right now, I get the wrong answer from code like this:
f1 <- function(df) {
g <- function() {
eval(quote(x+y), env=df)
}
y <- 1:10
g()
}
f1(df)
because the eval looks in the environment of f1, finds y there, and
gives me the wrong answer.
I can modify f1 so it works:
f2 <- function(df) {
g <- function(env) {
eval(quote(x+y), env=df, enclos=env)
}
y <- 1:10
g(parent.frame())
}
but this means carrying around both parent.frame() and df. I'd like
to do this:
f3 <- function(df) {
env <- as.environment(df)
g <- function() {
eval(quote(x+y), env=env)
}
y <- 1:10
g()
}
and get the same result as from f2(df), but currently as.environment
doesn't like to be passed a data.frame. Is there a better way to do
the same thing?
Duncan Murdoch
More information about the R-help
mailing list