Comment franchir les frontières dans r

Tout en travaillant avec des fonctions en R, parfois, vous travaillez avec des objets que vous ne créez d'abord dans l'espace de travail. Vous utilisez les arguments X

Sommaire

, 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'espace de travail après l'utilisation de la fonction. Alors qu'est ce qu'il se passe?

Créer 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 son retrait:", 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'espace de travail. Comment venir?

Rechercher 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 dans l'espace de travail grâce à un script ou en utilisant la ligne de commande, cet environnement de parent se trouve être l'environnement mondial.

Si R voit tout nom d'objet mentionné dans aucun 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 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.


» » » » Comment franchir les frontières dans r