Variables globales dans R

151

Je fouille dans les manuels, je voulais demander à la communauté: Comment pouvons-nous définir des variables globales à l'intérieur d'une fonction?

Alphaneo
la source

Réponses:

174

Comme le assign()montre la réponse de Christian , il existe un moyen d'attribuer dans l'environnement global. Une manière plus simple, plus courte (mais pas meilleure ... s'en tenir à assign) consiste à utiliser l' <<-opérateur, c'est-à-dire

    a <<- "new" 

à l'intérieur de la fonction.

Dirk Eddelbuettel
la source
41
Cette approche n'enregistre pas en fait dans l'environnement global, mais plutôt dans la portée parent. Parfois, la portée du parent sera la même que celle de l'environnement global, bien que dans certains cas avec de nombreuses fonctions imbriquées, ce ne sera pas le cas.
LunaticSoul
5
Pourquoi est-il assignpréféré <<-?
Jasha
4
@Jasha <<-recherchera dans la chaîne de boîtiers jusqu'à l'environnement global et affectera la première variable correspondante qu'il trouve. En théorie, si vous avez une fonction f()imbriquée dans une fermeture g()et aexiste dans g(), l'utilisation de a <<-in f()affectera ain g(), et non l'environnement global. Cependant, c'est souvent ce que vous voulez.
Bob
93

J'ai trouvé une solution pour définir une variable globale dans une publication de liste de diffusion via assign :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
Christian
la source
1
voir aussi la réponse acceptée de ce post: stackoverflow.com/questions/3969852/… pour mettre à jour les dataframes dans une fonction
user1420372