Table des matières:
Vidéo: À la "Frontière Sud" du Mexique, où commence vraiment le mur contre les migrants 2025
Lorsque vous travaillez avec des fonctions dans R, vous travaillez parfois avec des objets que vous n'avez pas créés dans l'espace de travail. Vous utilisez les arguments x, mult et FUN comme s'il s'agissait d'objets et vous créez un pourcentage d'objet dans la fonction que vous ne pouvez pas retrouver dans l'espace de travail après avoir utilisé la fonction. Alors que se passe-t-il?
Créer un cas de test
Découvrons un petit exemple. D'abord, créez un objet x et une petite fonction test () comme ceci:
x <- 1: 5 test <- function (x) {cat ("Ceci est x:", x, "n") rm (x) cat ("Ceci est x après avoir enlevé it: ", x," n ")}
La fonction test () ne fait pas grand-chose. Il prend un argument x, l'imprime sur la console, le supprime et essaie de l'imprimer à nouveau. Vous pouvez penser que cette fonction échouera, car x disparaît après la ligne rm (x). Mais non, si vous essayez cette fonction, cela fonctionne très bien, comme le montre l'exemple suivant:
Même après avoir enlevé x, R peut encore trouver un autre x qu'il peut imprimer. Si vous regardez de plus près, vous voyez que le x imprimé dans la deuxième ligne n'est pas celui que vous avez donné en argument, mais le x que vous avez créé auparavant dans l'espace de travail. Comment venir?
Rechercher le chemin
Si vous utilisez une fonction, la fonction crée d'abord un environnement local
temporaire. Cet environnement local est imbriqué dans l'environnement global, ce qui signifie que, à partir de cet environnement local, vous pouvez également accéder à n'importe quel objet de l'environnement global. Dès que la fonction se termine, l'environnement local est détruit avec tous les objets qui s'y trouvent.
. Si vous appelez une fonction depuis l'espace de travail via un script ou en utilisant la ligne de commande, cet environnement parent est l'environnement global. Si R voit un nom d'objet mentionné dans un code de la fonction, il recherche d'abord dans l'environnement local. Parce qu'il trouve un objet x là, il utilise celui-là pour la première déclaration cat (). Dans la ligne suivante, R supprime cet objet x. Ainsi, lorsque R atteint la troisième ligne, il ne peut plus trouver d'objet x dans l'environnement local. Aucun problème. R déplace la pile d'environnements et vérifie si elle trouve quelque chose qui ressemble à un x dans l'environnement global. Parce qu'il peut trouver un x là-bas, il utilise celui-là dans la deuxième déclaration de chat ().
Si vous utilisez rm () dans une fonction, rm () supprimera par défaut uniquement les objets de cette fonction.De cette façon, vous pouvez éviter de manquer de mémoire lorsque vous écrivez des fonctions qui doivent fonctionner sur d'énormes jeux de données. Vous pouvez immédiatement supprimer les gros objets temporaires au lieu d'attendre que la fonction le fasse à la fin.
