It may not be a very famous fact, but even in R, if you use the package exclusively, you can use it in an object-oriented manner. In particular, here I will study object-oriented programming using a package called R6. Other similar packages include S3, S4 (this is recommended by Google's internal code conventions), RC methods, and more. However, I heard that R6 can write in the most common OO language style. Torima The following seems to be possible normally.
· Creating classes and instances -Creating member variables and class methods -Invoking the constructor when creating an instance -Use of private methods and public methods (or variables) properly ・ Inheritance (not yet verified by me) · etc
A really cohesive SlideShare document presented at TokyoR http://www.slideshare.net/nakamichi/r6-upload?ref= It seems that the field here is basically a member variable. Fields and methods can be Public or Private
However, instead of specifying Public and Private for each variable or method as in Python, Define what you put in Public and Private together http://www.slideshare.net/hiroki84/r6-classes-42764598 http://qiita.com/hoxo_m/items/23b10243b6ffbea33a80
First make a class
#Install the R6 package
install.packages("R6")
library(R6)
Person <-
#Let's create a class called "Person".
R6Class("Person",
public = list(
#Members that can be called from outside the class are public= list()Describe in list format in
#Both member variables and class methods can be written in this List.
#Private variables and private methods are private= list()so
#Must be defined separately(See below)
name = NA, #Member variable, no default value
hair = "black", #Member variables with default values
initialize = function(name, hair){
#The constructor is"initialize"This is the function named. (
#Member variable is self$Described in
self$name <- name
self$hair <- hair
},
#Define method
set_hair = function(hair) self$hair = hair,
greet = function(greet) print(paste(greet," I am ",self$name))
)
)
The point to note is
public = list(
name = NA,
hair = "black",
If you do not set the default value of the member variable that appears in the class like That's not good.
Otherwise, you will get the following error: cannot add bindings to a locked environment
Also, the default value specified here becomes the type of the member variable. If you assign a numeric type with the default value, later in the constructor or method You will not be able to substitute character string types.
Create an instance and try to operate it
#The instance is ClassName$new(arg)I will make it with.
#Let's create a Person instance called Mr. Yamada with red hair.
Yamama_Person <- Person$new("yamada","red")
print Yamama_Person #You can see the list of members normally with the print statement
#Of class methods"greet"Let me say hello using.
Yamama_Person$greet("hello")
Yamama_Person$greet("good morning")
#Manipulate hair color
Yamama_Person$hair #Member variables"hair"Check the initial value of
[1] "red"
Yamama_Person$set_hair("blue") #Member variables"hair"To change"set"Exercise the method
Yamama_Person$hair #reconfirmation
[1] "blue"
Click here for how to use the private method
Person <-
R6Class("Person",
private = list(
#Private members are private= list()Describe in list format in
#I will describe it in a List separate from Public
age = NA,
get_age = function()private$age #When calling a private variable, self$Not private$Call with
),
public = list(
#Members that can be called from outside the class are public= list()Describe in list format in
#Both member variables and class methods can be written in this List.
#Private variables and private methods are private= list()Must be defined separately in(See below)
name = NA,
hair = "black",
initialize = function(name, hair, age){
self$name <- name
self$hair <- hair
private$age <- age #When calling a private method, self$Not private$Call with
},
set_hair = function(hair) self$hair = hair,
greet = function(greet) print(paste(greet," I am ",self$name)),
show_age = function() private$get_age() -5
)
)
Recommended Posts