[R] What is a 'closure'?

R. Michael Weylandt michael.weylandt at gmail.com
Fri Jan 20 06:40:18 CET 2012


To put a little more concrete example into what Peter and Ben said
about the environment being key:

environment(c)
 # NULL This is a primitive, so it has no environment

environment(library)
 # <environment: namespace:base> Built-in function but it has an
environment (usually the namespace of the package whence it comes)

But don't think that's only because library() does all its work at the
"R-level" while c() works at the C level

environment(as.vector)
# Same as above: this function is implemented as an "Internal" which
means (basically) it goes straight to the C level as well
# (For completeness sake, it can dispatch as an S3 generic back to R)

So the lesson is -- almost anything is a closure except for things
that are explicitly primitives.

Michael

On Thu, Jan 19, 2012 at 4:19 PM, peter dalgaard <pdalgd at gmail.com> wrote:
>
> On Jan 19, 2012, at 21:39 , Ben Bolker wrote:
>
>> Ajay Askoolum <aa2e72e <at> yahoo.co.uk> writes:
>>
>>>
>>> Michael, thank you, especially for the link. I think I understand.
>>>
>>> The vocabulary is so different! I know 'closure' as 'user-defined function'.
>>>
>>
>>  Not quite.  All (??) user-defined functions are closures, but lots
>> of non-user-defined functions are closures too ...
>>
>
> Also, it is not actually the function that is the closure, it is the function completed with its environment, which is where, during evaluation, unbound objects will be sought.
>
> The function itself is a parsed version of the function definition. When called, almost all functions will need to find something from their environment, e.g. the "<-" operator. The only functions that are completely self-contained are those that return a constant or one of the function arguments (maybe a few more).
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list