From murdoch.duncan at gmail.com  Sat Feb 16 17:39:39 2013
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Sat, 16 Feb 2013 11:39:39 -0500
Subject: [Rd] Printing of anonymous functions in calls is sub-optimal
In-Reply-To: <CABdHhvH4+sm++-wN6mRm9uWY6XTjO5uf7ktWyOFKcB81APeM4g@mail.gmail.com>
References: <CABdHhvEgK1g4gYhmovu_EbvSN185g9LnLAacC5ojWup3_aG07w@mail.gmail.com>
	<CACk-te153qhWuzN4MwcozknhM38kNVv6MtJKKg-r1eVx9ODs0w@mail.gmail.com>
	<CABdHhvH4+sm++-wN6mRm9uWY6XTjO5uf7ktWyOFKcB81APeM4g@mail.gmail.com>
Message-ID: <511FB64B.3060808@gmail.com>

On 13-02-16 10:19 AM, Hadley Wickham wrote:
> On Sat, Feb 16, 2013 at 12:24 AM, Bert Gunter <gunter.berton at gene.com> wrote:
>> As there has been no response to this ...
>>
>> Why not simply:
>>
>>> g <- substitute(f(x),list(f=function(x){x+1})) ## with curly braces
>>> g
>> function (x)
>> {
>>      x + 1
>> }(x)
>>> x <- 2
>>> eval(g)
>> [1] 3
>
> Thomas Lumley sent me a similar suggestion off-list; but I'm not
> complaining about how it works; my example executed fine. I'm
> complaining that the rendering of the call object is misleading.

Even with the braces it's misleading, in that

y <- function (x)
{
     x + 1
}(x)

is evaluated to define y to be a function with body

{
     x + 1
}(x)

which is syntactically valid, but not the same as the thing being deparsed.

Duncan Murdoch



[Rd] Printing of anonymous functions in calls is sub-optimal
Duncan Murdoch