[PYTHON] Versuchen Sie es mit einer objektorientierten Klasse in R (R6-Methode)

Einführung

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

Referenzmaterial

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

Beispielcode

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

Versuchen Sie es mit einer objektorientierten Klasse in R (R6-Methode)
[Statistik] [R] Versuchen Sie, die Teilungspunktregression zu verwenden.
Versuchen Sie es mit Spyder, das in Anaconda enthalten ist
Versuchen Sie es mit LevelDB mit Python (plyvel)
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Veranschaulichen Sie Klassenabhängigkeiten in einem Xcode-Projekt
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie, das HL-Band der Reihe nach zu verwenden
Versuchen Sie die Clusteranalyse mit K-Mitteln
Ajax in Django (mit generischer Klassenansicht)
Versuchen Sie, Blueprint with Flask zu verwenden, um Controller zu trennen
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Versuchen Sie, ein Konturdiagramm mit matplotlib mit OpenFOAM zu zeichnen
Versuchen Sie, mit Node.js einen HTTP-Server zu erstellen
Versuchen Sie, den _method-Parameter von Rails in webapp2 zu imitieren
Lösen Sie simultane Gleichungen sofort mit Python
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit PDFMiner
Versuchen Sie es mit Geopandas
Versuchen Sie es mit scipy
Versuchen Sie es mit pandas.DataFrame
Klassenmethode statische Methode
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Bestimmen Sie den Schwellenwert mithilfe der P-Tile-Methode in Python
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Versuchen Sie die Gesichtserkennung in Echtzeit mit einer Webkamera
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python