Further delving into the mysteries of R evaluation...This is closely related to my previous question ( How to write an R function that evaluates an expression within a data-
This is most easily avoided by passing strings into topfn instead of expressions.
topfn <- function(df, ex_txt)
{
fn(df, ex_txt)
}
fn <- function(dfr, expr_txt)
{
eval(parse(text = expr_txt), dfr)
}
df <- data.frame(a = 1:5, b = 1:5 )
fn(df, "a")
fn(df, "2 * a + b")
topfn(df, "a")
topfn(df, "2 * a + b")
EDIT:
You could let the user pass expressions in, but use strings underneath for your convenience.
Change topfn to
topfn <- function(df, ex)
{
ex_txt <- deparse(substitute(ex))
fn(df, ex_txt)
}
topfn(df, a)
topfn(df, 2 * a + b)
ANOTHER EDIT:
This seems to work:
topfn <- function(df, ex)
{
eval(substitute(fn(df, ex)))
}
fn <- function(dfr, expr)
{
eval(substitute(expr), dfr)
}
fn(df, a)
fn(df, 2 * a + b)
topfn(df, a)
topfn(df, 2 * a + b)