From murdoch at stats.uwo.ca  Thu Sep 14 21:38:12 2006
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Thu, 14 Sep 2006 15:38:12 -0400
Subject: [Rd] Question about substitute() and function def
In-Reply-To: <m2d59y8e7o.fsf@ziti.fhcrc.org>
References: <m2d59y8e7o.fsf@ziti.fhcrc.org>
Message-ID: <4509AFA4.6010203@stats.uwo.ca>

On 9/14/2006 3:01 PM, Seth Falcon wrote:
> Hi,
> 
> Can someone help me understand why
> 
>   substitute(function(a) a + 1, list(a=quote(foo)))
> 
> gives
> 
>   function(a) foo + 1
> 
> and not
> 
>   function(foo) foo + 1
> 
> The man page leads me to believe this is related to lazy evaluation of
> function arguments, but I'm not getting the big picture.

I think it's the same reason that this happens:

 > substitute(c( a = 1, b = a), list(a = quote(foo)))
c(a = 1, b = foo)

The "a" in function(a) is the name of the arg, it's not the arg itself 
(which is missing).  Now a harder question to answer is why this happens:

 > substitute(function(a=a) 1, list(a=quote(foo)))
function(a = a) 1

I would have expected to get "function(a = foo) 1".

Duncan Murdoch




[Rd] Question about substitute() and function def
Duncan Murdoch