I have a love-hate-love relationship with the R language. I like the huge R set of libraries (packages). But. R language syntax is very different from other languages so there’s a huge time cost to switch context from any language to R.
As a case in point, I was looking at object initialization for R S4 OOP. Weirdly, and not in a good way at all, R has three built-in ways to do OOP and all three are completely different. The three OOP modeling approaches are called S3, S4, and RC (reference classes).
So, I was reading the R documentation so I could do a little demo that defines and creates an S4 object. How hard could it be? Well, I found the official documentation to be very poor — it explained all the deep nuances but it didn’t explain how to do basic things very well at all. And the examples I found online were often flat-out incorrect.
As best I can summarize, to define an S4 class you use setClass with the “slots” keyword to define fields. The “contains” keyword is optional and is used for inheritance (which is really weird). The “representation” and “prototype” keywords are deprecated.
In order to assign initial values to an object you can define a “initialize” function using setMethod and “.Object”. To invoke initialize, you don’t call it explicitly, you can use one of two syntaxes to create an object. In order to define a class method, you use setGeneric with setMethod. To access a field, you use the “@” operator.
If all this sounds wacky, well, yes it is. It’s almost impossible to understand S4 without seeing examples. I’m very, very experienced with OOP in several languages and it took me several hours to fully figure out R OOP using S4. Compared to modern OOP with languages like Python and C#, R OOP with S4 is really poorly designed, quirky, and awkward. But it does work.

.NET Test Automation Recipes
Software Testing
SciPy Programming Succinctly
Keras Succinctly
R Programming
2026 Visual Studio Live
2025 Summer MLADS Conference
2026 DevIntersection Conference
2025 Machine Learning Week
2025 Ai4 Conference
2026 G2E Conference
2026 iSC West Conference
You must be logged in to post a comment.