Classes
Purpose
Implement S4 Classes
> setClass("Radha", representation = representation(name = "character",
+ age = "numeric"), prototype = prototype(name = "Radha Krishna Pendyala",
+ age = 32))
[1] "Radha"
> getClass("Radha")
Class "Radha"
Slots:
Name: name age
Class: character numeric
> x <- new("Radha")
> print(x)
An object of class "Radha"
Slot "name":
[1] "Radha Krishna Pendyala"
Slot "age":
[1] 32 |
Create a Generic Method, setMethod and then invoke on a object x.
> setGeneric("ambition", function(object, x) standardGeneric("ambition"))
[1] "ambition"
> setMethod("ambition", "Radha", function(object, x) "High Frequency Trading Firm")
[1] "ambition"
> x <- new("Radha")
> ambition(x)
[1] "High Frequency Trading Firm" |
Create a setMethod with no reference to a class
> setMethod("ambition", "numeric", function(object, x) "Purpose : High Frequency Trading Firm")
[1] "ambition"
> ambition(10)
[1] "Purpose : High Frequency Trading Firm" |
Create a setMethod with no reference to a class and having a signature
> setMethod("ambition", signature("numeric", "character"), function(object,
+ x) "My Purpose : High Frequency Trading Firm")
[1] "ambition"
> ambition(10, "vinay")
[1] "My Purpose : High Frequency Trading Firm" |
Playing with setGeneric
> setGeneric("ambition1", function(x, y, ...) standardGeneric("ambition1"))
[1] "ambition1"
> setMethod("ambition1", signature("numeric"), function(x, y) "Time")
[1] "ambition1"
> setMethod("ambition1", signature("numeric", "numeric"), function(x,
+ y, ...) "Time")
[1] "ambition1"
> ambition1(10, 10)
[1] "Time" |
Look carefully at these examples below to get an idea of the control Example 1
> setGeneric("temp1", function(x, y, ...) {
+ y <- standardGeneric("temp1")
+ print("In Generic")
+ y
+ })
[1] "temp1"
> setMethod("temp1", signature("numeric"), function(x, y, ...) {
+ print("In SetMethod")
+ })
[1] "temp1"
> temp1(1)
[1] "In SetMethod"
[1] "In Generic"
[1] "In SetMethod" |
Example 2
> setGeneric("temp2", function(x, y, ...) {
+ print("In Generic")
+ standardGeneric("temp2")
+ })
[1] "temp2"
> setMethod("temp2", signature("numeric"), function(x, y, ...) {
+ print("In SetMethod")
+ })
[1] "temp2"
> temp2(1)
[1] "In Generic"
[1] "In SetMethod" |
A generic function is invoked and then the dispatch goes to the right class.
You can specify additional arguments in the function
> setGeneric("temp3", function(x, y, ...) standardGeneric("temp3"))
[1] "temp3"
> setMethod("temp3", signature("numeric"), function(x, y, rads = "Nov",
+ ...) {
+ print(paste(x, y, rads, sep = ""))
+ })
[1] "temp3"
> temp3(19, 77)
[1] "1977Nov"
> temp3(19, 1, "Nov28")
[1] "191Nov28" |
Look carefully… I am passing a names argument in to the function.