Message-ID: <4C6A630C.9020802@gmail.com>
Date: 2010-08-17T10:23:08Z
From: Duncan Murdoch
Subject: parent.frame(1) of a S4 method is not a calling environment.
In-Reply-To: <87wrrq2ns2.fsf@gmail.com>
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
> Standardised, simpler syntax like .() in ggplot and plyr, would be handy here.
> Hopefully .() is not grabbed for something else in meanwhile:).
>
> Vitaly.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>