Faire face à la portée de r

Chaque objet que vous créez dans la R finit dans cet environnement, qui est appelé le environnement mondial.

Sommaire

L'environnement mondial est l'univers de l'utilisateur R où tout se passe.

Gourous de R vous diront que cette “ univers ” est en fait contenue dans un autre “ univers ” et que dans une autre, et ainsi de suite - mais que “ espace ” est un environnement hostile adapté seulement aux codeurs audacieuses sans crainte de casser des choses. Donc, il n'y a pas besoin d'y aller maintenant.

Vous pouvez travailler avec quelques objets que vous ne créez d'abord dans l'environnement mondial. Vous utilisez probablement les arguments X, Plus d'informations, et AMUSANT comme si ils sont les objets, et vous créez un objet pour cent au sein de la fonction que vous ne pouvez pas retrouver dans l'environnement mondial après l'utilisation de la fonction. Alors qu'est ce qu'il se passe?

Création d'un cas de test

Voyons à travers un petit exemple. Tout d'abord, créer un objet X et une petite test () fonctionner comme ceci:

X lt; - 1: 5test lt; - la fonction (x) {cat (“ Ceci est x: ” ;, x, “ n ” rm (x) chat) (“ Ceci est x après l'avoir retiré: ” ;, x, “ n ”)}

La test () la fonction ne fait pas beaucoup. Elle prend un argument X, imprime à la console, supprime, et tente d'imprimer à nouveau. Vous pouvez penser que cette fonction va échouer, parce X disparaît après la ligne RM (x). Mais non, si vous essayez cette fonction, il fonctionne très bien, comme le montre l'exemple suivant:

> Test (5: 1) Ceci est x: 5 4 3 2 x 1Ce est après son retrait: 1 2 3 4 5

Même après avoir enlevé X, R peut toujours trouver un autre X qu'il peut imprimer. Si vous regardez un peu plus près, vous voyez que le X imprimée dans la deuxième ligne est en fait pas celui que vous avez donné comme argument, mais le X vous avez créé auparavant dans l'environnement mondial. Comment venir?

Recherche le chemin

Si vous utilisez une fonction, la fonction crée d'abord un temporaire environnement local. Cet environnement local est nichée au sein de l'environnement de la planète, ce qui signifie que, à partir de ce local, vous pouvez également accéder à un objet à partir de l'environnement mondial. Dès que la fonction se termine, l'environnement local est détruit avec tous les objets qu'il contient.


Pour être tout à fait correct, une fonction crée toujours un environnement au sein de l'environnement où il est appelé, appelé le environnement parent. Si vous appelez une fonction de l'environnement mondial, soit par le biais d'un script ou en utilisant la ligne de commande, cet environnement de parent se trouve être l'environnement mondial.

Vous pouvez voir une représentation schématique de la façon dont le test () fonction fonctionne ci-dessous. Le grand rectangle représente l'environnement mondial, et le petit rectangle représente l'environnement local de la fonction de test. Dans l'environnement mondial, vous attribuez la valeur 1: 5 à l'objet X. Dans l'appel de fonction, cependant, vous attribuez la valeur 5: 1 à l'argument X. Cet argument devient un objet X dans l'environnement local.

Comment R regarde à travers les environnements locaux et mondiaux.
Comment R regarde à travers les environnements locaux et mondiaux.

Si R voit tout nom de l'objet - dans ce cas, X - mentionné dans un code de la fonction, il recherche d'abord l'environnement local. Parce qu'il trouve un objet X là, elle utilise celui-là pour la première chat () déclaration. Dans la ligne suivante, R supprime cet objet X. Ainsi, lorsque R atteint la troisième ligne, il ne peut pas trouver un objet X en plus de l'environnement local. Pas de problème.

R se déplace jusqu'à la pile des environnements et des contrôles pour voir si elle trouve quelque chose ressemblant à un X dans l'environnement mondial. Parce qu'il peut trouver une X là, elle utilise celui-là dans la seconde chat () déclaration.

Si vous utilisez rm () dans une fonction, rm () , par défaut, uniquement supprimer des objets dans l'environnement local de cette fonction. De cette façon, vous pouvez éviter de manquer de mémoire lorsque vous écrivez des fonctions qui ont à travailler sur d'énormes ensembles de données. Vous pouvez retirer immédiatement de grands objets temporaires au lieu d'attendre pour la fonction de le faire à la fin.


» » » » Faire face à la portée de r