Purpose
To code classes and explore further concepts

Classes with out explicit slots

> setClass("seq", contains = "numeric", prototype = prototype(numeric(3)))
[1] "seq"
> s1 <- new("seq")
> s1
An object of class "seq"
[1] 10.0000000  4.9208030  0.5407331
> slotNames(s1)
[1] ".Data"

initializeMethod

> setMethod("initialize", "seq", function(.Object) {
+     .Object[1] <- 10
+     .Object[2] <- rnorm(1, 0, 10)
+     .Object[3] <- runif(1)
+     .Object
+ })
[1] "initialize"
> new("seq")
An object of class "seq"
[1] 10.0000000 -4.5983522  0.1227316

Overwrite a function in a class

> tryCatch(setMethod("[", signature("integer"), function(x, i,
+     j, drop) print("howdy")), error = function(e) print("we failed"))
[1] "we failed"

Practice tryCatch

> options(warn = -2)
> options(warn = 0)
> setClass("MyInt", representation("integer"))
[1] "MyInt"
> setMethod("[", signature("MyInt"), function(x, i, j, drop) print("howdy"))
[1] "["
> x <- new("MyInt", 5:7)
> x[2]
[1] "howdy"
[1] "howdy"