This may have been asked before, but is there an elegant way to check whether an variable/argument passed to a function is a "parse tree" for an (unevaluated) expression or not, *without* evaluating it if not?
Currently, I do various rather ad hoc eval()+substitute() tricks for this that most likely only work under certain circumstances. Ideally, I'm looking for a isParseTree() function such that I can call: expr0 <- foo({ x <- 1 }) expr1 <- foo(expr0) stopifnot(identical(expr1, expr0)) where foo() is: foo <- function(expr) { if (!isParseTree(expr)) expr <- substitute(expr) expr } I also want to be able to do: expr2 <- foo(foo(foo(foo(expr0)))) stopifnot(identical(expr2, expr0)) and calling foo() from within other functions that may use the same "tricks". The alternative is of course to do: foo <- function(expr, substitute=TRUE) { if (substitute) expr <- substitute(expr) expr } but it would be neat to do this without passing an extra argument. If this is not possible to implement in plain R, can this be done internally inspecting SEXP:s and so on? Even better would be if substitute() could do this for me, e.g. expr <- substitute(expr, unlessAlreadyDone=TRUE) Any suggestions? Thanks, Henrik ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel