Inhoudsopgave:
Video: How Far Can We Go? Limits of Humanity. 2024
Terwijl u met functies in R werkt, werkt u soms met enkele objecten die u niet eerst in de werkruimte hebt gemaakt. U gebruikt de argumenten x, mult en FUN alsof het objecten zijn en u maakt een objectpercentage binnen de functie die u na het gebruik van de functie niet kunt vinden in de werkruimte. Dus wat is er aan de hand?
Maak een testcase
Laten we het achterhalen door een klein voorbeeld. Maak eerst een object x en een kleine test () -functie zoals deze:
x <- 1: 5 test <- functie (x) {cat ("Dit is x:", x, "n") rm (x) cat ("Dit is x na verwijderen it: ", x," n ")}
De test () functie doet niet veel. Er is een argument x voor nodig, het drukt het af naar de console, verwijdert het en probeert het opnieuw af te drukken. Je denkt misschien dat deze functie zal mislukken, omdat x verdwijnt na de regel rm (x). Maar nee, als u deze functie probeert, werkt het prima, zoals in het volgende voorbeeld:
Zelfs na het verwijderen van x, kan R nog steeds een andere vinden x dat het kan afdrukken. Als je wat nauwkeuriger kijkt, zie je dat de x die op de tweede regel wordt afgedrukt, niet de x is die je als argument hebt opgegeven, maar de x die je eerder in de werkruimte hebt gemaakt. Hoe kan dat?
Zoek het pad
Als u een functie gebruikt, maakt de functie eerst een tijdelijke
lokale omgeving. Deze lokale omgeving is genest binnen de globale omgeving, wat betekent dat u vanuit die lokale omgeving ook toegang hebt tot elk object uit de globale omgeving. Zodra de functie eindigt, wordt de lokale omgeving vernietigd samen met alle objecten erin.
bovenliggende omgeving. Als u vanuit de werkruimte een functie oproept via een script of via de opdrachtregel, is deze bovenliggende omgeving de globale omgeving. Als R een objectnaam ziet die wordt vermeld in een willekeurige code in de functie, zoekt deze eerst in de lokale omgeving. Omdat het een object x daar vindt, wordt het gebruikt voor de eerste cat () -instructie. In de volgende regel verwijdert R dat object x. Dus wanneer R de derde regel bereikt, kan het object x in de lokale omgeving niet meer vinden. Geen probleem. R gaat de stapel omgevingen op en controleert of er in de globale omgeving iets als een x voorkomt. Omdat het daar een x kan vinden, wordt dat in de tweede cat () -instructie gebruikt.
Als u rm () in een functie gebruikt, verwijdert rm () standaard alleen objecten binnen die functie.Op deze manier kunt u voorkomen dat er onvoldoende geheugen beschikbaar is wanneer u functies schrijft die moeten werken aan enorme datasets. U kunt meteen grote tijdelijke objecten verwijderen in plaats van te wachten tot de functie aan het einde is voltooid.