parent.frame(1) of a S4 method is not a calling environment.
On Tuesday, August 17, 2010, Vitaly S. <spinuvit.list at gmail.com> wrote:
Duncan Murdoch <murdoch.duncan at gmail.com> writes:
Vitaly S. wrote:
Martin Morgan <mtmorgan at fhcrc.org> writes:
So, ?can I be sure that for such functions parent.frame(2) will always work? What are the additional rules?
callNextMethod() will cause additional problems; the idea that you'll grab things from somewhere other than function arguments doesn't seem like a robust design, even if it's used in some important parts of R. Martin
That make it difficult to handle unevaluated expressions in methods. A solution would be to explicitly require the users to use quote() or expression(), ?and then to use the "expression" in the signature. Slightly unpleasant, though.
You could use formulas for that. ?If you pass in formula = ~ x + y*z then environment(formula) will be the right evaluation environment, and formula[[2]] will be the unevaluated x + y*z. Duncan Murdoch
Thank you Duncan, I didn't know that. For programmatic use though, formula interface is slightly inconvenient. A specialized function and class would be desirable. With the advent of more and more complex S4 classes, unevaluated expressions in methods calls will became a necessity, that's my feeling.
I probably should move the quoting related out of plyr into it's own package to facilitate this type of reuse. I think the current structure is quite general. Hadley
Assistant Professor / Dobelman Family Junior Chair Department of Statistics / Rice University http://had.co.nz/