Es ist vielleicht keine sehr berühmte Tatsache, aber selbst in R können Sie das Paket, wenn Sie es ausschließlich verwenden, objektorientiert verwenden. Besonders hier werde ich die objektorientierte Programmierung mit einem Paket namens R6 studieren. Andere ähnliche Pakete umfassen S3, S4 (dies wird von den internen Code-Konventionen von Google empfohlen), RC-Methoden und mehr. Ich habe jedoch gehört, dass R6 im gängigsten OO-Sprachstil schreiben kann. Torima Folgendes scheint normalerweise möglich zu sein.
· Erstellen von Klassen und Instanzen -Erstellung von Mitgliedsvariablen und Klassenmethoden
Ein wirklich zusammenhängendes SlideShare-Dokument, das bei TokyoR angekündigt wurde http://www.slideshare.net/nakamichi/r6-upload?ref= Das Feld hier scheint eine Mitgliedsvariable zu sein. Felder und Methoden können öffentlich oder privat sein
Anstatt jedoch Public und Private für jede Variable oder Methode wie in Python anzugeben, Definieren Sie, was Sie öffentlich und privat zusammenfügen http://www.slideshare.net/hiroki84/r6-classes-42764598 http://qiita.com/hoxo_m/items/23b10243b6ffbea33a80
Machen Sie zuerst eine Klasse
#Installieren Sie das R6-Paket
install.packages("R6")
library(R6)
Person <-
#Lassen Sie uns eine Klasse namens "Person" erstellen.
R6Class("Person",
public = list(
#Mitglieder, die von außerhalb der Klasse angerufen werden können, sind öffentlich= list()Beschreiben Sie im Listenformat in
#In diese Liste können sowohl Mitgliedsvariablen als auch Klassenmethoden geschrieben werden.
#Private Variablen und private Methoden sind privat= list()damit
#Muss separat definiert werden(Siehe unten)
name = NA, #Mitgliedsvariable, kein Standardwert
hair = "black", #Mitgliedsvariablen mit Standardwerten
initialize = function(name, hair){
#Der Konstruktor ist"initialize"Dies ist die benannte Funktion. ((
#Mitgliedsvariable ist self$Beschrieben in
self$name <- name
self$hair <- hair
},
#Methode definieren
set_hair = function(hair) self$hair = hair,
greet = function(greet) print(paste(greet," I am ",self$name))
)
)
Der zu beachtende Punkt ist
public = list(
name = NA,
hair = "black",
Wenn Sie nicht den Standardwert der Mitgliedsvariablen festlegen, die in der Klasse wie angezeigt wird Das ist nicht gut.
Andernfalls wird folgende Fehlermeldung angezeigt: cannot add bindings to a locked environment
Der hier angegebene Standardwert wird auch zum Typ der Mitgliedsvariablen. Wenn Sie einen numerischen Typ mit dem Standardwert zuweisen, werden später Konstruktoren und Methoden verwendet Sie können Zeichenfolgentypen nicht ersetzen.
Erstellen Sie eine Instanz und versuchen Sie, sie zu bedienen
#Die Instanz ist ClassName$new(arg)Ich werde es schaffen mit.
#Erstellen wir eine Personeninstanz namens Mr. Yamada mit roten Haaren.
Yamama_Person <- Person$new("yamada","red")
print Yamama_Person #Sie können die Liste der Mitglieder normalerweise mit der print-Anweisung anzeigen
#Von Klassenmethoden"greet"Lassen Sie mich Hallo sagen mit.
Yamama_Person$greet("hello")
Yamama_Person$greet("good morning")
#Manipulieren Sie die Haarfarbe
Yamama_Person$hair #Mitgliedsvariablen"hair"Überprüfen Sie den Anfangswert von
[1] "red"
Yamama_Person$set_hair("blue") #Mitgliedsvariablen"hair"Wechseln"set"Üben Sie die Methode aus
Yamama_Person$hair #Rückbestätigung
[1] "blue"
Klicken Sie hier, um zu erfahren, wie Sie die private Methode verwenden
Person <-
R6Class("Person",
private = list(
#Private Mitglieder sind privat= list()Beschreiben Sie im Listenformat in
#Ich werde es in einer von Public getrennten Liste beschreiben
age = NA,
get_age = function()private$age #Beim Aufrufen einer privaten Variablen self$Nicht privat$Rufen Sie an mit
),
public = list(
#Mitglieder, die von außerhalb der Klasse angerufen werden können, sind öffentlich= list()Beschreiben Sie im Listenformat in
#In diese Liste können sowohl Mitgliedsvariablen als auch Klassenmethoden geschrieben werden.
#Private Variablen und private Methoden sind privat= list()Muss separat in definiert werden(Siehe unten)
name = NA,
hair = "black",
initialize = function(name, hair, age){
self$name <- name
self$hair <- hair
private$age <- age #Wenn Sie eine private Methode aufrufen, self$Nicht privat$Rufen Sie an mit
},
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