Environnements, comportement par référence et champs partagés

Programmation orientée objet avec S3 et R6 en R

Richie Cotton

Data Evangelist at DataCamp

 

 

 

           liste

Programmation orientée objet avec S3 et R6 en R

 

 

 

           liste

 

 

           environnement

Programmation orientée objet avec S3 et R6 en R

 

env <- new.env()
lst <- list(x = pi ^ (1:5), y = matrix(month.abb, 3))
env$x <- pi ^ (1:5)
env[["y"]] <- matrix(month.abb, 3)
Programmation orientée objet avec S3 et R6 en R

 

lst
$x
3.141593   9.869604  31.006277  97.409091 306.019685

$y
     [,1]  [,2]  [,3]  [,4] 
[1,] "Jan" "Apr" "Jul" "Oct"
[2,] "Feb" "May" "Aug" "Nov"
[3,] "Mar" "Jun" "Sep" "Dec"
env
<environment: 0x103f3dfc8>
Programmation orientée objet avec S3 et R6 en R

 

ls.str(lst)
x :  num [1:5] 3.14 9.87 31.01 97.41 306.02
y :  chr [1:3, 1:4] "Jan" "Feb" "Mar" "Apr" "May" ...
ls.str(env)
x :  num [1:5] 3.14 9.87 31.01 97.41 306.02
y :  chr [1:3, 1:4] "Jan" "Feb" "Mar" "Apr" "May" ...
Programmation orientée objet avec S3 et R6 en R

 

lst2 <- lst
(lst$x <- exp(1:5))
2.718282   7.389056  20.085537  54.598150 148.413159
lst2$x
3.141593   9.869604  31.006277  97.409091 306.019685
identical(lst$x, lst2$x)
FALSE
Programmation orientée objet avec S3 et R6 en R

 

env2 <- env
(env$x <- exp(1:5))
2.718282   7.389056  20.085537  54.598150 148.413159
env2$x
2.718282   7.389056  20.085537  54.598150 148.413159
identical(env$x, env2$x)
TRUE
Programmation orientée objet avec S3 et R6 en R

 

 

 

               copie par valeur

Programmation orientée objet avec S3 et R6 en R

 

 

 

               copie par valeur

 

           copie par référence

Programmation orientée objet avec S3 et R6 en R
thing_factory <- R6Class(
  "Thing",
  private = list(

shared = {
e <- new.env()
e$a_shared_field = 123
e
}
),
active = list( a_shared_field = function(value) { if(missing(value)) { private$shared$a_shared_field } else { private$shared$a_shared_field <- value } } )
)
Programmation orientée objet avec S3 et R6 en R

 

a_thing <- thing_factory$new()
another_thing <- thing_factory$new()
a_thing$a_shared_field
123
another_thing$a_shared_field
123
a_thing$a_shared_field <- 456
another_thing$a_shared_field
456
Programmation orientée objet avec S3 et R6 en R

Résumé

  • Créer des environnements avec new.env()
  • Les manipuler avec la syntaxe de liste
  • Les environnements se copient par référence
  • Partager des champs R6 grâce à un champ environnement
Programmation orientée objet avec S3 et R6 en R

Passons à la pratique !

Programmation orientée objet avec S3 et R6 en R

Preparing Video For Download...