débutant R6

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

débutant R6

Messagepar Stéphane Laurent » 25 Aoû 2018, 13:56

Bonjour,

J'essaye de me mettre à R6. J'ai implémenté les nombres complexes pour m'exercer.

Code : Tout sélectionner

Complex <- R6Class("Complex",
                  public = list(
                    re = NA,
                    i = NA,
                    initialize = function(re, i) {
                      if (!missing(re)) self$re <- re
                      if (!missing(i)) self$i <- i
                      self$greet()
                    },
                    set_i = function(val) {
                      self$i <- val
                    },
                    greet = function() {
                      cat(paste0("Hello, my imaginary part is ", self$i, ".\n"))
                    }
                  ),
                  active = list(
                    conjugate = function() {
                      return(Complex$new(re=self$re, i=-self$i))
                    })
)

Complex$set("public", "print", overwrite=TRUE,
              function(z) {
                cat(sprintf("Complex number %f + i %f", self$re, self$i))
                invisible(self)
              }
)


Quand je fais

Code : Tout sélectionner

z <- Complex$new(1,2)


j'obtiens dans la console

Code : Tout sélectionner

Hello, my imaginary part is 2.


Ensuite quand je fais

Code : Tout sélectionner

z$print()


j'obtiens dans la console

Code : Tout sélectionner

Complex number 1.000000 + i 2.000000


Ensuite quand je fais

Code : Tout sélectionner

> z$conjugate


j'obtiens dans la console

Code : Tout sélectionner

Hello, my imaginary part is -2.
Complex number 1.000000 + i -2.000000


Je trouve ça bizarre comme comportement. Une explicatiion ? Je suis preneur de tout conseil sur R6.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: débutant R6

Messagepar Pierre-Yves Berrard » 26 Aoû 2018, 08:39

Bonjour,

Que trouves-tu bizarre précisément ?

Si tu fais référence à la dernière commande,
conjugate instancie un nouvel objet ($new) donc initialize() est appelée et cette fonction appelle greet(),
donc le résultat ne me semble pas incohérent.
PY

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: débutant R6

Messagepar Stéphane Laurent » 27 Aoû 2018, 09:22

Pourquoi z$conjugate remet "Hello, my imaginary part is 2." ?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: débutant R6

Messagepar Pierre-Yves Berrard » 27 Aoû 2018, 09:59

Parce que (comme écrit plus haut) initialize est appelée et qu' initialize appelle greet.
PY

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: débutant R6

Messagepar Stéphane Laurent » 27 Aoû 2018, 11:49

Ok, je n'ai qu'à admettre que c'est comme ça ;-)
Merci !

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: débutant R6

Messagepar Stéphane Laurent » 27 Aoû 2018, 11:53

Je commence à me réveiller, désolé.

Comment pourrais-je me passer de $new dans conjugate ?

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: débutant R6

Messagepar Stéphane Laurent » 27 Aoû 2018, 12:01

Ah je crois que je commence à comprendre:

Code : Tout sélectionner

                  active = list(
                    conjugate = function() {
                      self$re <- self$re; self$i <- -self$i
                      self
                    })

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: débutant R6

Messagepar Pierre-Yves Berrard » 27 Aoû 2018, 19:19

Par contre, je n'aurais pas placé conjugate en "active" (sert à définir des sortes de champs dynamiques) mais plutôt dans les méthodes "public".
(tu peux aussi supprimer self$re <- self$re;)
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité