181 votes

Comment utiliser "<<-" (affectation de portée) dans R ?

Je viens de lire un article sur scoping dans l'intro R et je suis très curieux d'en savoir plus sur la <<- affectation.

Le manuel présente un exemple (très intéressant) de <<- J'ai l'impression d'avoir compris. Ce qui me manque encore, c'est le contexte dans lequel cela peut être utile.

J'aimerais donc que vous me donniez des exemples (ou des liens vers des exemples) sur les cas où l'utilisation de <<- peut être intéressante/utile. Quels sont les risques liés à son utilisation (il semble facile d'en perdre la trace), et quels sont les conseils que vous souhaiteriez partager.

4voto

Carlos Cinelli Points 1872

Les <<- L'opérateur peut également être utile pour Classes de référence lors de l'écriture de méthodes de référence . Par exemple :

myRFclass <- setRefClass(Class = "RF",
                         fields = list(A = "numeric",
                                       B = "numeric",
                                       C = function() A + B))
myRFclass$methods(show = function() cat("A =", A, "B =", B, "C =",C))
myRFclass$methods(changeA = function() A <<- A*B) # note the <<-
obj1 <- myRFclass(A = 2, B = 3)
obj1
# A = 2 B = 3 C = 5
obj1$changeA()
obj1
# A = 6 B = 3 C = 9

0voto

Rtist Points 391

Je l'utilise pour modifier à l'intérieur de map() un objet dans l'environnement global.

a = c(1,0,0,1,0,0,0,0)

Supposons que je veuille obtenir un vecteur qui soit c(1,2,3,1,2,3,4,5), c'est-à-dire que s'il y a un 1, laissez-le 1, sinon ajoutez 1 jusqu'au prochain 1.

map(
  .x = seq(1,(length(a))),
  .f = function(x) {
    a[x] <<- ifelse(a[x]==1, a[x], a[x-1]+1)
    })
a
[1] 1 2 3 1 2 3 4 5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X