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
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
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