Upload
phamdien
View
233
Download
0
Embed Size (px)
Citation preview
Congratulations, you sank my battleship!Object oriented programming in R
Janina TorbeckeInga Schwabe
5th TRUG meetingJanuary 16, 2014
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Outline
OOP
OOP in R
Battleship
Advantages &disadvantagesof OOP in R
Otherapplications
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Object oriented programming (OOP)
Objects
which
have attributeshave associated procedures (methods)are usually instances of classes
For example..
A student, member of the class “Students” with attributesname, age, grade
For different objects different methods(e.g. generic function “plot”, different procedures for differentobjects)
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
The S4 system
Define an S4 class with setClass():
1 #Class Student:
2 setClass(Class = "Student",
3 representation(fullname = "character", age = "numeric"),
4 prototype(fullname = NA_character_, age = NA_real_))
Class The name of the class
Representation A named list of the slots ( = class attributes)indicating the class of each slot
Prototype An object with default data for the slot
Contains Names of the superclasses(For inheritance purposes, explained later)
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
The S4 system
Create an instance/object of the class with new():
1 #New instance of the class "Student":
2 Gerd <- new("Student", fullname = "Gerd Jansen", age = 21)
3 Jan <- new("Student", fullname = "Jan van der Meulen", age = 19)
Access class slot by @ operator:
1 Gerd@fullname #Prints "Gerd Jansen"
2 Gerd@age #Prints "21"
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Methods and Generic Functions
Generic functions alllow different methods to be selectedcorresponding to the classes of the objects supplied as anargument in a call to the function
1 #Set your own generic function (e.g. How many sides has a shape?)
2 setGeneric(name = "sides", def = function(object){
3 standardGeneric("sides")}, valueClass = "character")
45 #standarGeneric() dispatches the method defined for a generic function
67 #Define different methods
8 setMethod("sides", signature("Triangle"), function(object) return("3"))
9 setMethod("sides", signature("Circle"), function(object) return("Infinite"))
1011 > sides(new("Triangle"))
12 [1] "3"
13 > sides(new("Circle"))
14 [1] "Infinite"
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Inheritance
An object or class is basedon another object or class
Example: Graduate students& undergraduate studentswith partly same behavior
1 #Define superclass (other ways possible)
2 setIs("Undergraduate", "Student")
34 #Check relationship
5 extends("Undergraduate", "Student")
Inheritance of methods
1 Use callNextMethod() in setMethod()
Student
Graduate Undergr.
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Battleship: An application of the S4 system
1 #New class "Ship"
2 setClass("Ship", representation(posX = "numeric",
3 posY = "numeric", found = "logical"), prototype(found = FALSE))
45 #New Ship:
6 ships <- list()
7 ships[1] <- new("Ship", posX = sample(1:nRow,1),
8 posY = sample(1:nCol,1))
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Battleship: An application of the S4 system
1 for(i in 2:nships) {
2 foundPos <- FALSE
3 shipRow <- NA
4 shipCol <- NA
56 while(!foundPos){ #Loop continues until position of 1 ship is found
7 shipRow <- sample(1:nRow,1) #Random row nr
8 shipCol <- sample(1:nCol,1) #Random col nr
910 #Check if position is available
11 for(j in 1:length(ships)) { #Iterate over all ships in the list
12 foundPos <- !(ships[[j]]@posX == shipRow && ships[[j]]@posY == shipCol)
13 if(!foundPos) {
14 break
15 }
16 }
17 }
18 #New ship on available position
19 ships[i] <- new("Ship", posX = shipRow, posY = shipCol)
20 }
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Advantages & disadvantages of OOP in R
Advantages:
Enables the use of generic functions(necessary in order to build your own R library)
Efficiently programming, e.g. elimination of redundant codethrough inheritance
Neat code
Disadvantages:
Not always a big difference between OOP & functionalprogramming
Execution time may increase
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
Other (possible) applications
School data
Modelling of social networks
Cognitive psychology (e.g. neurons in neural network)
. . .
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!
S4 Key functions
setClass() Create new class
setIs() Define superclass of a class
extends() Check relationship(s) between classes
isClass() Check class name
is() Show all subclasses of a class
getClasses Show all classes of an object
removeClass() Remove class
@/slot() Access slots
slotNames() Show slot names
getSlots() Show slot names + their classes
setGeneric() Create new generic function
setMethod() Define new method
methods() Show all methods of a generic function
Janina Torbecke Inga Schwabe Congratulations, you sank my battleship!