Other sites

Function Closures and S4 Methods

This brief tutorial illustrates how to combine S4 object oriented capabilities with function closures in order to develop classes with built in methods. Thanks to Hadley Wickham for the great contribution of material and tutorials made available on the web and to Bill Venables and Stefano Iacus for their kind reviews.

Regular polygons

As Wikipedia states:

In Euclidean geometry, a regular polygon is a polygon that is equiangular (all angles are equal in measure) and equilateral (all sides have the same length). Square, pentagon, hexagon are regular polygons.

In order to define a regular polygon we need to state the number of sides the polygon is made of (n) and the dimension of its side (s).

S4

We want to define a define a simple S4 based system to create and plot of regular polygons.

As a first step we define a very simple class for regular polygons, say rolygon, as:

Function Closures

The R Language Definition manual states:

Functions … have three basic components: a formal argument list, a body and an environment. A function’s environment is the environment that was active at the time that the function was created. Any symbols bound in that environment are captured and available to the function. This combination of the code of the function and the bindings in its environment is called a ‘function closure’, a term from functional programming theory.

Moreover, any time a function is called, a new environment is created, whose enclosure is the environment where the function was defined. The computation, as expressed by the body of the function, occurs in the newly created environment. Thus, whenever we call a function we have at least two environments: the environment the function was defined in and the environment where the function evaluation takes place.

By using this idea, we can define a function f() that returns a function g(). As g() is created within the evaluation environment of f(), this last environment is the enclosure of g(). Therefore, g() remembers all symbols bound in that environment.

Note that class rolygon, its plot method and f() are all defined within the evaluation environment of rolygon(). When rolygon() is evaluated, f() is returned and f() remembers about class rolygon and its plotting method.

The “PDF” button below allows you to get a copy of this post. If you’re looking for a nice and “R-style” formatted PDF version of this article, please follow comments. The link to the PDF will be add on December 12th.
If you’re reading this post from outside Milano R net blog, you need to visit www.milanor.net in order to view comments and so get the PDF link.

Related

To leave a comment for the author, please follow the link and comment on his blog: Milano R net.