Chapter 7 A Primer on the
R6 Class System
A central goal of the Targeted Learning statistical paradigm is to estimate scientifically relevant parameters in realistic (usually nonparametric) models.
tlverse is designed using basic OOP principles and the
R6 OOP framework.
While we’ve tried to make it easy to use the
tlverse packages without worrying
much about OOP, it is helpful to have some intuition about how the
structured. Here, we briefly outline some key concepts from OOP. Readers
familiar with OOP basics are invited to skip this section.
7.1 Classes, Fields, and Methods
The key concept of OOP is that of an object, a collection of data and functions that corresponds to some conceptual unit. Objects have two main types of elements:
- fields, which can be thought of as nouns, are information about an object, and
- methods, which can be thought of as verbs, are actions an object can perform.
Objects are members of classes, which define what those specific fields and methods are. Classes can inherit elements from other classes (sometimes called base classes) – accordingly, classes that are similar, but not exactly the same, can share some parts of their definitions.
Many different implementations of OOP exist, with variations in how these
concepts are implemented and used. R has several different implementations,
S4, reference classes, and
tlverse uses the
R6, methods and fields of a class object are accessed using
$ operator. For a more thorough introduction to
R6, see https://adv-r.hadley.nz/r6.html, from Hadley Wickham’s Advanced
R (Wickham 2014).
7.2 Object Oriented Programming:
OO concepts (classes with inherentence) were baked into Python from the first
published version (version 0.9 in 1991). In contrast,
R gets its OO “approach”
from its predecessor,
S, first released in 1976. For the first 15 years,
had no support for classes, then, suddenly,
S got two OO frameworks bolted on
in rapid succession: informal classes with
S3 in 1991, and formal classes with
S4 in 1998. This process continues, with new OO frameworks being periodically
released, to try to improve the lackluster OO support in
R, with reference
R5, 2010) and
R6 (2014). Of these,
R6 behaves most like Python
classes (and also most like OOP focused languages like C++ and Java), including
having method definitions be part of class definitions, and allowing objects to
be modified by reference.
Wickham, Hadley. 2014. Advanced R. Chapman; Hall/CRC.