[PYTHON] Essayez d'utiliser une classe orientée objet dans R (méthode R6)

introduction

Ce n'est peut-être pas un fait très connu, mais même dans R, si vous utilisez le package exclusivement, vous pouvez l'utiliser de manière orientée objet. Surtout ici, j'étudierai la programmation orientée objet en utilisant un package appelé R6. D'autres packages similaires incluent S3, S4 (ceci est recommandé par les conventions de code interne de Google), les méthodes RC, etc. Cependant, j'ai entendu dire que R6 peut écrire dans le style de langage OO le plus courant. Torima Ce qui suit semble être possible normalement.

· Création de classes et d'instances -Création de variables membres et de méthodes de classe -Invocation du constructeur lors de la création d'une instance -Utilisation correcte de la méthode privée et de la méthode publique (ou variable) ・ Héritage (pas encore vérifié par moi) · etc

Matériel de référence

Un document SlideShare vraiment cohérent annoncé à TokyoR http://www.slideshare.net/nakamichi/r6-upload?ref= Le champ ici semble être une variable membre. Les champs et méthodes peuvent être publics ou privés

Cependant, au lieu de spécifier Public et Private pour chaque variable ou méthode comme en Python, Définissez ce que vous mettez ensemble en public et en privé http://www.slideshare.net/hiroki84/r6-classes-42764598 http://qiita.com/hoxo_m/items/23b10243b6ffbea33a80

Exemple de code

Faites d'abord un cours


#Installez le package R6
install.packages("R6")
library(R6)
 
 
Person <-
#Créons une classe appelée "Person".
  R6Class("Person",
 
 
      public = list(
     #Les membres qui peuvent être appelés depuis l'extérieur de la classe sont publics= list()Décrivez sous forme de liste dans
     #Les variables membres et les méthodes de classe peuvent être écrites dans cette liste.
     #Les variables privées et les méthodes privées sont privées= list()alors
     #Doit être défini séparément(Voir ci-dessous)
 
        name = NA, #Variable membre, pas de valeur par défaut
        hair = "black",  #Variables membres avec valeurs par défaut
         
        initialize = function(name, hair){ 
        #Le constructeur est"initialize"C'est la fonction nommée. (
        #La variable membre est self$Décrit dans
          self$name <- name  
          self$hair <- hair
        },
         
        #Définir la méthode
        set_hair = function(hair) self$hair = hair,
        greet    = function(greet) print(paste(greet," I am ",self$name))
      )
)

Le point à noter est


public = list( 

        name = NA, 
        hair = "black", 

Si vous ne définissez pas la valeur par défaut de la variable membre qui apparaît dans la classe comme Ce n'est pas bon.

Sinon, vous obtiendrez l'erreur suivante: cannot add bindings to a locked environment

De plus, la valeur par défaut spécifiée ici devient le type de la variable membre. Si vous affectez un type numérique avec la valeur par défaut, les constructeurs et méthodes ultérieurs Vous ne pourrez pas remplacer les types de chaînes de caractères.

Créez une instance et essayez de la faire fonctionner

#L'instance est ClassName$new(arg)Je vais le faire avec.
#Créons une instance Person appelée M. Yamada avec des cheveux roux.
Yamama_Person <- Person$new("yamada","red")
 
print Yamama_Person #Vous pouvez voir la liste des membres normalement avec l'instruction d'impression
 
 
 #Des méthodes de classe"greet"Laissez-moi vous dire bonjour en utilisant.
Yamama_Person$greet("hello")
Yamama_Person$greet("good morning")
 
 
 #Manipuler la couleur des cheveux
Yamama_Person$hair #Variables de membre"hair"Vérifiez la valeur initiale de
[1] "red"
 
Yamama_Person$set_hair("blue") #Variables de membre"hair"Changer"set"Exercez la méthode
Yamama_Person$hair #reconfirmation
[1] "blue"

Cliquez ici pour savoir comment utiliser la méthode privée


Person <-
  R6Class("Person",
     
    private = list(
     #Les membres privés sont privés= list()Décrivez sous forme de liste dans
     #Je vais le décrire dans une liste distincte de Public
 
      age = NA,
      get_age = function()private$age  #Lors de l'appel d'une variable privée, self$Pas privé$Appeler avec
      ),
     
    public = list(
     #Les membres qui peuvent être appelés depuis l'extérieur de la classe sont publics= list()Décrivez sous forme de liste dans
     #Les variables membres et les méthodes de classe peuvent être écrites dans cette liste.
     #Les variables privées et les méthodes privées sont privées= list()Doit être défini séparément dans(Voir ci-dessous)
 
      name = NA,
      hair = "black",
      initialize = function(name, hair, age){
        self$name <- name
        self$hair <- hair
        private$age <- age  #Lors de l'appel d'une méthode privée, self$Pas privé$Appeler avec
      },
       
      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

Essayez d'utiliser une classe orientée objet dans R (méthode R6)
[Statistiques] [R] Essayez d'utiliser la régression par points de division.
Essayez d'utiliser Spyder inclus dans Anaconda
Essayez d'utiliser LevelDB avec Python (plyvel)
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Illustrer les dépendances de classe dans un projet Xcode
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Essayez d'utiliser la bande HL dans l'ordre
Essayez l'analyse de cluster par K-means
Ajax dans Django (en utilisant la vue de classe générique)
Essayez d'utiliser Blueprint avec Flask pour séparer les contrôleurs
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Essayez de dessiner un diagramme de contour en utilisant matplotlib avec OpenFOAM
Essayez de créer un serveur HTTP en utilisant Node.js
Essayez d'imiter le paramètre _method de Rails dans webapp2
Résolvez des équations simultanées en un instant en utilisant Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser Cookiecutter
Essayez d'utiliser PDFMiner
Essayez d'utiliser des géopandas
Essayez d'utiliser scipy
Essayez d'utiliser pandas.DataFrame
Méthode de classe Méthode statique
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser PyODE
Déterminer le seuil à l'aide de la méthode P-tile en python
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Essayez la détection des visages en temps réel à l'aide d'une webcam
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python