Object-Oriented Programming (OOP) in R provides powerful tools for organizing and structuring code. It enables developers to create reusable and modular software components, enhancing code maintainability and scalability.
R supports three main OOP systems:
S3 is the most commonly used OOP system in R. It's simple, flexible, and well-suited for data analysis tasks.
# Create an S3 object
my_car <- list(make = "Toyota", model = "Corolla", year = 2022)
class(my_car) <- "car"
# Define a method for the car class
print.car <- function(x) {
    cat("Car:", x$make, x$model, "(" , x$year, ")\n")
}
# Use the method
print(my_car)
    
    S4 provides a more formal approach to OOP in R. It's useful for complex projects requiring strict type checking and method dispatch.
# Define an S4 class
setClass("Person",
    slots = c(
        name = "character",
        age = "numeric"
    )
)
# Create an S4 object
john <- new("Person", name = "John Doe", age = 30)
# Define a method for the Person class
setMethod("show", "Person", function(object) {
    cat("Name:", object@name, "\n")
    cat("Age:", object@age, "\n")
})
# Use the method
show(john)
    
    R6 is a more recent addition to R's OOP toolkit. It provides class-based OOP similar to languages like Python or Java.
library(R6)
# Define an R6 class
Person <- R6Class("Person",
    public = list(
        name = NULL,
        age = NULL,
        initialize = function(name, age) {
            self$name <- name
            self$age <- age
        },
        greet = function() {
            cat("Hello, my name is", self$name, "and I'm", self$age, "years old.\n")
        }
    )
)
# Create and use an R6 object
jane <- Person$new("Jane Smith", 25)
jane$greet()
    
    The choice between S3, S4, and R6 depends on your project's requirements:
Object-Oriented Programming in R enhances code organization and reusability. It's particularly useful in large-scale projects and when developing R packages. To further improve your R programming skills, explore R Functional Programming and R Performance Optimization techniques.